diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index b6ed7cb8e..37d41882a 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -12,3 +12,5 @@ f424854667e15daf0ad59d5fc68cc3eba6ea152e 3929b03030d64a2fe9ce9ac25b52fec2da6d1391 # Apply `Symfony` Code Style to entire PHP code base f5a93ae18ec8e036cb47bb05b71f40d49049a505 +# Apply Prettier after updated config +bc92390b1fb7a7b16e88d7afd88ba5372afe4e51 diff --git a/.github/workflows/check-docs.yaml b/.github/workflows/check-docs.yaml new file mode 100644 index 000000000..91a515c7d --- /dev/null +++ b/.github/workflows/check-docs.yaml @@ -0,0 +1,43 @@ +name: Check Docs + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + prettier: + name: Lint prettier + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: lts/iron + + - name: Run Prettier on Docs + working-directory: docs + run: npx prettier . --check + + check-build: + name: Check Docs build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: lts/iron + + - name: Install tooling + working-directory: docs + run: npm install + + - name: Build docs with VitePress + working-directory: docs + run: npm run docs:build diff --git a/.github/workflows/deploy-gh-pages.yaml b/.github/workflows/deploy-gh-pages.yaml index ff0c20491..0b3ff2b91 100644 --- a/.github/workflows/deploy-gh-pages.yaml +++ b/.github/workflows/deploy-gh-pages.yaml @@ -1,5 +1,5 @@ -# Sample workflow for building and deploying a Jekyll site to GitHub Pages -name: Deploy GitHub Pages with Sphinx-docs +# Sample workflow for building and deploying a documentation site to GitHub Pages +name: Deploy GitHub Pages on: # Runs on pushes targeting the default branch @@ -26,21 +26,27 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 + - name: Setup Pages uses: actions/configure-pages@v2 - - name: Install Sphinx and plugins - run: | - pipx install sphinx - pipx inject sphinx recommonmark - pipx inject sphinx sphinx_rtd_theme - - name: Build docs with Sphinx-docs + + - uses: actions/setup-node@v4 + with: + node-version: lts/iron + + - name: Install tooling working-directory: docs - run: make html + run: npm install + + - name: Build docs with VitePress + working-directory: docs + run: npm run docs:build + - name: Upload artifact uses: actions/upload-pages-artifact@v1 with: - path: docs/build/html/ + path: docs/.vitepress/dist/ # Deployment job deploy: diff --git a/.github/workflows/php_linter.yml b/.github/workflows/php_linter.yml index bedbb2858..ee0d12320 100644 --- a/.github/workflows/php_linter.yml +++ b/.github/workflows/php_linter.yml @@ -37,8 +37,9 @@ jobs: working-directory: ./Website/htdocs/mpmanager - name: Run PHPStan - run: ./vendor/bin/phpstan analyze --error-format=table app/Http app/Services app/Models/ app/Events app/Listeners app/Misc app/modules --memory-limit=2G --level=1 + run: composer run phpstan-analyze working-directory: ./Website/htdocs/mpmanager + continue-on-error: true - name: Run Psalm run: composer run psalm-check diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..f1f34c2eb --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +micropowermanager.io \ No newline at end of file diff --git a/README.md b/README.md index ee5211ade..d52e18fb4 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,12 @@ # MicroPowerManager ---- +MicroPowerManager (MPM) is a decentralized utility and customer management tool. +Manage customers, revenues and assets with this all-in one Open Source platform. + +## Documentation + +MPM's documentation is hosted on [micropowermanager.io](https://micropowermanager.io/). ## This project @@ -41,245 +46,14 @@ - It uses Node 16.10 - It uses MariaDB 10.3 which is compatible with MySQL 5.7 -## Setup - ---- - -### Docker installation - -**Windows and Mac:** - -- [Docker Desktop](https://www.docker.com/products/docker-desktop). - -**Linux:** - -- Docker provides installation instructions for various Linux distributions. You can find them on - the [Docker installation page for Linux.](https://docs.docker.com/engine/install/). - -### Docker Compose - -Docker Compose is often included with the Docker Desktop installations for Windows and Mac. For Linux, you might need to -install it separately. - -**Windows and Mac:** - -- Included with Docker Desktop. - -**Linux:** - -- Docker Compose on GitHub -- On the GitHub page, you can find instructions for downloading and installing Docker Compose on Linux. Be sure to check - for the latest release. - -### Repository setup - -1. Clone or download the repository -2. Build the docker containers with `docker-compose up` - -## Development - ---- - -The development environment is served under - -## Frontend - -The frontend is served under . You can find frontend files under `Website/ui`. -The frontend is built with Vue.js. After first run with `docker-compose up` dependencies will be installed -automatically. -If you want to install dependencies manually, you can run `npm install` under `Website/ui` folder. - -### Folder Structure - -When adding new files to the project, please adhere to the following folder structure: - -- **Creating New Modules:** - Modules are the components used in pages. For example, the Client module holds components related to clients. Every - component associated with clients should be placed under the Client module. - -```sh -Website/ui -├── src -│ ├── modules -│ │ ├── newModule -``` - -- **Creating New Pages:** - Pages are the components used in routes. We follow the nuxt.js folder structure for pages. The `index.vue` file under - a page folder represents the listing page of the page, while the `_id.vue` file represents the detail page. Since we - are not using nuxt.js, routes need to be defined manually. You can find the routes in - the `Website/ui/src/ExportedRoutes.js` file. - -```sh -Website/ui -├── src -│ ├── pages -│ │ ├── newPage -| | | ├── index.vue -| | | ├── _id.vue -``` - -#### Plugins - -Plugins are additional components developed as separate packages to enhance our product. This separation helps keep the -main codebase clean. Each plugin should reside in its own folder under the `Website/ui/src/plugins` directory. -Additionally, each plugin should have its own backend code, which will be explained in the backend section. - -```sh -Website/ui -├── src -│ ├── plugins -│ │ ├── newPlugin -``` - -In the backend section, you'll find instructions on how to create a plugin. - -## Backend - -The backend is built with Laravel. The backend is served under . You can find backend -files under `Website/htdocs/mpmanager`. After the first run with `docker-compose up`, dependencies will be installed -automatically. If you prefer to install dependencies manually or need to add additional packages, follow these steps: - -1. Enter the Docker container named "laravel" by navigating to the "mpmanager" directory: - - ```bash - docker exec -it laravel bash - cd mpmanager - ``` - -2. Run the following command to install dependencies, replacing {package-name} with the actual name of the package: - - ```bash - ./composer.phar install {package-name} - ``` - -These steps ensure that you can manage dependencies either automatically during the initial docker-compose up or -manually when needed. -Make sure to replace `{package-name}` with the actual name of the package you want to install. - -We followed the laravel folder structure for the backend. If you want to learn more about the folder structure, you can -check the [Laravel documentation](https://laravel.com/docs/9.x/structure). - -### Sharding in Micropower Manager - -Sharding is a technique employed to partition a large database into smaller, more agile, and easily manageable segments -known as data shards. In the context of Micropower Manager, sharding is integral to the implementation of Software as a -Service (SaaS) functionality. - -#### Shard Representation - -Each shard in Micropower Manager represents an individual company leveraging the platform for their Customer -Relationship Management (CRM) needs. - -#### Central Database - "micro_power_manager" - -To facilitate this, a central database named "micro_power_manager" is established. This central database houses -company-specific information and common data such as installable plugins. - -#### New Company Registration Process - -When a new company registers an account, a dedicated database is dynamically created for that specific company. This new -database incorporates Micropower Manager's core migration files located at `Website/htdocs/mpmanager/database/migrations/micropowermanager` - -#### User Session Interaction - -Upon successful registration, when a user associated with a particular company logs into Micropower Manager, the -database connection for their session is dynamically altered. This ensures that the user gains access to and interacts -with data exclusive to their company, providing a personalized and secure experience within the application. - -### Migration on First run - -When you run the application for the first time, you need to run the following command to migrate the database: - -```bash -docker exec -it laravel bash -cd mpmanager -php artisan sharding:initialize -``` - -This command will create the central database which is required for MPM to function. - -If you want to load sample (dummy) data for testing run: - -```bash -docker exec -it laravel bash -cd mpmanager -php artisan dummy:create-company-with-dummy-data -php artisan migrator:copy -php artisan migrator:migrate -``` - -This commands will create the first company database with dummy data from a snapshot. -It will then apply any migrations that have been added to the application after the snapshot has been taken. - -You can use the following credentials to login to the application: - -```sh -username: dummy@user.com -password: 123123 -``` - -The dummy protected page password of this company is 123123. - -### Sharding Specific Migration Commands - -- **Creating Migration File:** - When creating a migration file, you need to use the following command: - -```bash -docker exec -it laravel bash -cd mpmanager -php artisan migrator:create {migration-name} -``` - -This command creates a migration file in Micropower Manager's core migration files location: `Website/htdocs/mpmanager/database/migrations/micropowermanager` - -After creating the migration file, you can shift it to other company databases using the following command: - -```bash -docker exec -it laravel bash -cd mpmanager -php artisan migrator:copy -``` - -This command syncs the migration files in the core migration folder for other company migrations. - -To migrate the database, use the following command: - -```bash -docker exec -it laravel bash -cd mpmanager -php artisan migrator:migrate -``` - -Alternatively, you can migrate the database for a specific company using the following command: - -```bash -docker exec -it laravel bash -cd mpmanager -php shard:migrate {company_id} {--force} -``` - -### Install Plugins - -We have a custom plugin creator command that generates a template. Use the following command to create a new plugin: - -```bash -docker exec -it laravel bash -cd mpmanager -php artisan micropowermanager:new-package {package-name} -``` - -This command creates a plugin template in the Website/htdocs/mpmanager/packages/inensus folder. Upon creation, you can proceed with plugin development. You can check other plugins for reference. -Additionally, this command will create UI folders for the newly created plugin. Move the created UI folder to the Website/ui/src/plugins folder. +## Getting Started -### phpMyAdmin +Explore MPM's capabilities by -To project also includes phpMyAdmin which enables quick database operations without installing third-party software or writing any single line into the terminal. +- logging into the [Demo Version](https://demo.micropowermanager.io/) +- setting up a local installation following this [guide](https://micropowermanager.io/development/development-environment.html) -The default credentials for the database are: +## Support -```sh -username: root -password: wF9zLp2qRxaS2e -``` +- [OSEA Discord](https://discord.osea-community.org/) (`#micropowermanager` channel) +- [EnAccess](https://enaccess.org/) diff --git a/Website/htdocs/mpmanager/.gitignore b/Website/htdocs/mpmanager/.gitignore index c255b2248..8f6a5c8f3 100644 --- a/Website/htdocs/mpmanager/.gitignore +++ b/Website/htdocs/mpmanager/.gitignore @@ -7,8 +7,3 @@ Homestead.json Homestead.yaml /start.sh ./creator.log - -# ignore all company specific migrations -/database/migrations/** -!/database/migrations/base/ -!/database/migrations/micropowermanager/ diff --git a/Website/htdocs/mpmanager/app/Console/Commands/DatabaseBackupCommand.php b/Website/htdocs/mpmanager/app/Console/Commands/BackupFull.php similarity index 59% rename from Website/htdocs/mpmanager/app/Console/Commands/DatabaseBackupCommand.php rename to Website/htdocs/mpmanager/app/Console/Commands/BackupFull.php index c082a6e66..a8d9ccc50 100644 --- a/Website/htdocs/mpmanager/app/Console/Commands/DatabaseBackupCommand.php +++ b/Website/htdocs/mpmanager/app/Console/Commands/BackupFull.php @@ -6,13 +6,14 @@ use Illuminate\Console\Command; -class DatabaseBackupCommand extends Command +class BackupFull extends Command { - protected $signature = 'db:backup'; + protected $signature = 'backup:full'; + protected $description = 'Run the backup for core base database and all tenant databases'; public function handle(): void { - $this->info('Make copy of master db'); + $this->info('Starting backup for core database'); config(['database.connections.mysql' => config('database.connections.micro_power_manager')]); $this->call('backup:run', [ '--only-db' => true, @@ -20,7 +21,7 @@ public function handle(): void '--disable-notifications' => true, '--db-name' => ['mysql'], ]); - $this->info('Starting backup for sharding databases'); - $this->call('shard:db.backup'); + $this->info('Completed backup for core database'); + $this->call('backup-tenant:run'); } } diff --git a/Website/htdocs/mpmanager/app/Console/Commands/ShardDatabaseBackupCommand.php b/Website/htdocs/mpmanager/app/Console/Commands/BackupTenantDatabase.php similarity index 62% rename from Website/htdocs/mpmanager/app/Console/Commands/ShardDatabaseBackupCommand.php rename to Website/htdocs/mpmanager/app/Console/Commands/BackupTenantDatabase.php index 3337bfb76..0d61742f0 100644 --- a/Website/htdocs/mpmanager/app/Console/Commands/ShardDatabaseBackupCommand.php +++ b/Website/htdocs/mpmanager/app/Console/Commands/BackupTenantDatabase.php @@ -4,14 +4,15 @@ namespace App\Console\Commands; -class ShardDatabaseBackupCommand extends AbstractSharedCommand +class BackupTenantDatabase extends AbstractSharedCommand { - protected $signature = 'shard:db.backup'; + protected $signature = 'backup-tenant:run'; + protected $description = 'Run the backup for provided tenant database(s)'; public function handle() { $databaseName = config('database.connections.shard'); - $this->info('Starting backup sharding databases'); + $this->info('Starting backup for tenant databases'); dump($this->arguments()); config(['database.connections.mysql' => $databaseName]); @@ -20,5 +21,6 @@ public function handle() '--filename' => $databaseName['database'].'_'.date('y-m-d H:i:s').'.zip', '--disable-notifications' => true, '--db-name' => ['mysql']]); + $this->info('Completed backup for tenant databases'); } } diff --git a/Website/htdocs/mpmanager/app/Console/Commands/InitializeShardingCommand.php b/Website/htdocs/mpmanager/app/Console/Commands/InitializeShardingCommand.php deleted file mode 100644 index 98c9b8533..000000000 --- a/Website/htdocs/mpmanager/app/Console/Commands/InitializeShardingCommand.php +++ /dev/null @@ -1,25 +0,0 @@ -call('optimize:clear'); - $this->call('migrate', [ - '--database' => 'micro_power_manager', - '--path' => '/database/migrations/base', - ]); - - $this->call('db:seed', [ - '--class' => ShardingDatabaseSeeder::class, - ]); - } -} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigrationCreator.php b/Website/htdocs/mpmanager/app/Console/Commands/MakeMigrationTenant.php similarity index 64% rename from Website/htdocs/mpmanager/app/Console/Commands/MigrationCreator.php rename to Website/htdocs/mpmanager/app/Console/Commands/MakeMigrationTenant.php index 7e6db4d51..b30d1de24 100644 --- a/Website/htdocs/mpmanager/app/Console/Commands/MigrationCreator.php +++ b/Website/htdocs/mpmanager/app/Console/Commands/MakeMigrationTenant.php @@ -4,10 +4,10 @@ use Illuminate\Console\Command; -class MigrationCreator extends Command +class MakeMigrationTenant extends Command { - protected $signature = 'migrator:create {migration-name}'; - protected $description = 'Create new migration file for company databases'; + protected $signature = 'make:migration-tenant {migration-name}'; + protected $description = 'Create new migration file for tenant database(s)'; public function handle() { diff --git a/Website/htdocs/mpmanager/app/Console/Commands/Migrator.php b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenant.php similarity index 57% rename from Website/htdocs/mpmanager/app/Console/Commands/Migrator.php rename to Website/htdocs/mpmanager/app/Console/Commands/MigrateTenant.php index 2031845c2..131dc9888 100644 --- a/Website/htdocs/mpmanager/app/Console/Commands/Migrator.php +++ b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenant.php @@ -2,16 +2,15 @@ namespace App\Console\Commands; -class Migrator extends AbstractSharedCommand +class MigrateTenant extends AbstractSharedCommand { - protected $signature = 'migrator:migrate'; - protected $description = 'Run all migrations on provided company database'; + protected $signature = 'migrate-tenant {--company-id=}'; + protected $description = 'Run the database migrations on provided tenant database(s)'; public function handle() { $this->call('optimize:clear'); $this->call('migrate', [ - '--force' => true, '--database' => 'shard', '--path' => '/database/migrations/micropowermanager', ]); diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantFresh.php b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantFresh.php new file mode 100644 index 000000000..cb2c8fec8 --- /dev/null +++ b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantFresh.php @@ -0,0 +1,18 @@ +call('optimize:clear'); + $this->call('migrate:fresh', [ + '--database' => 'shard', + '--path' => '/database/migrations/micropowermanager', + ]); + } +} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantInstall.php b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantInstall.php new file mode 100644 index 000000000..461043ef2 --- /dev/null +++ b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantInstall.php @@ -0,0 +1,17 @@ +call('optimize:clear'); + $this->call('migrate:install', [ + '--database' => 'shard', + ]); + } +} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantRefresh.php b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantRefresh.php new file mode 100644 index 000000000..fbc7f612c --- /dev/null +++ b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantRefresh.php @@ -0,0 +1,18 @@ +call('optimize:clear'); + $this->call('migrate:refresh', [ + '--database' => 'shard', + '--path' => '/database/migrations/micropowermanager', + ]); + } +} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantReset.php b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantReset.php new file mode 100644 index 000000000..77be445c3 --- /dev/null +++ b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantReset.php @@ -0,0 +1,18 @@ +call('optimize:clear'); + $this->call('migrate:reset', [ + '--database' => 'shard', + '--path' => '/database/migrations/micropowermanager', + ]); + } +} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantRollback.php b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantRollback.php new file mode 100644 index 000000000..fd13d5784 --- /dev/null +++ b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantRollback.php @@ -0,0 +1,18 @@ +call('optimize:clear'); + $this->call('migrate:rollback', [ + '--database' => 'shard', + '--path' => '/database/migrations/micropowermanager', + ]); + } +} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigratorStatus.php b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantStatus.php similarity index 55% rename from Website/htdocs/mpmanager/app/Console/Commands/MigratorStatus.php rename to Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantStatus.php index faf6867ef..5947c927c 100644 --- a/Website/htdocs/mpmanager/app/Console/Commands/MigratorStatus.php +++ b/Website/htdocs/mpmanager/app/Console/Commands/MigrateTenantStatus.php @@ -2,10 +2,10 @@ namespace App\Console\Commands; -class MigratorStatus extends AbstractSharedCommand +class MigrateTenantStatus extends AbstractSharedCommand { - protected $signature = 'migrator:migrate_status'; - protected $description = 'Show the status of all migrations on provided company database'; + protected $signature = 'migrate-tenant:status {--company-id=}'; + protected $description = 'Show the status of each migrations on provided tenant database(s)'; public function handle() { diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigrationMultiplexer.php b/Website/htdocs/mpmanager/app/Console/Commands/MigrationMultiplexer.php deleted file mode 100644 index c574e679c..000000000 --- a/Website/htdocs/mpmanager/app/Console/Commands/MigrationMultiplexer.php +++ /dev/null @@ -1,35 +0,0 @@ -each(function ($companyDatabase) use ($sourcePath) { - $this->info('copying migration files in '.$sourcePath.'database/migrations/'. - $companyDatabase->database_name); - shell_exec('cp -r '.$sourcePath.'database/migrations/micropowermanager/* '.$sourcePath. - 'database/migrations/'.$companyDatabase->database_name); - $this->info('migration files copied'); - - $this->info('sed applying to migration files in '.$sourcePath.'/database/migrations/'. - $companyDatabase->database_name); - shell_exec( - 'for file in '.$sourcePath.'/database/migrations/'.$companyDatabase->database_name.'/*.php - do - ##sed -i \'\' \'s/micropowermanager/\''.$companyDatabase->database_name.'\'/g\' $file - sed -i \'s/micropowermanager/\'shard\'/g\' $file - done' - ); - }); - $this->info('done'); - } -} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigratorCentralDatabase.php b/Website/htdocs/mpmanager/app/Console/Commands/MigratorCentralDatabase.php deleted file mode 100644 index 55d68485c..000000000 --- a/Website/htdocs/mpmanager/app/Console/Commands/MigratorCentralDatabase.php +++ /dev/null @@ -1,20 +0,0 @@ -call('optimize:clear'); - $this->call('migrate', [ - '--database' => 'micro_power_manager', - '--path' => '/database/migrations/base', - ]); - } -} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/MigratorStatusCentralDatabase.php b/Website/htdocs/mpmanager/app/Console/Commands/MigratorStatusCentralDatabase.php deleted file mode 100644 index 196c46eed..000000000 --- a/Website/htdocs/mpmanager/app/Console/Commands/MigratorStatusCentralDatabase.php +++ /dev/null @@ -1,20 +0,0 @@ -call('optimize:clear'); - $this->call('migrate:status', [ - '--database' => 'micro_power_manager', - '--path' => '/database/migrations/base', - ]); - } -} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/SeedBySeederNameCommand.php b/Website/htdocs/mpmanager/app/Console/Commands/SeedBySeederNameCommand.php deleted file mode 100644 index e302f5f12..000000000 --- a/Website/htdocs/mpmanager/app/Console/Commands/SeedBySeederNameCommand.php +++ /dev/null @@ -1,48 +0,0 @@ -argument('seederName'); - Artisan::call('db:seed', ['--force' => true, '--class' => $seederName]); - } catch (\Throwable $t) { - $this->info('failed seeding '.$t->getMessage()); - } - } -} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/SeedDatabaseCommand.php b/Website/htdocs/mpmanager/app/Console/Commands/SeedDatabaseCommand.php deleted file mode 100644 index fcfa52cef..000000000 --- a/Website/htdocs/mpmanager/app/Console/Commands/SeedDatabaseCommand.php +++ /dev/null @@ -1,19 +0,0 @@ -info('failed seeding '.$t->getMessage()); - } - } -} diff --git a/Website/htdocs/mpmanager/app/Console/Commands/ShardAwareMigrator.php b/Website/htdocs/mpmanager/app/Console/Commands/ShardAwareMigrator.php deleted file mode 100644 index 0c67fb0bd..000000000 --- a/Website/htdocs/mpmanager/app/Console/Commands/ShardAwareMigrator.php +++ /dev/null @@ -1,28 +0,0 @@ -option('force'); - $companyId = $this->argument('company_id'); - - /** @var DatabaseProxyManagerService $databaseProxyManagerService */ - $databaseProxyManagerService = app()->make(DatabaseProxyManagerService::class); - - $databaseProxyManagerService->runForCompany($companyId, function () use ($force) { - $command = 'migrate'.($force ? ':fresh' : ''); - $this->info('Calling '.$command); - - $this->call($command); - }); - } -} diff --git a/Website/htdocs/mpmanager/app/Exceptions/AccessRates/NoAccessRateFound.php b/Website/htdocs/mpmanager/app/Exceptions/AccessRates/NoAccessRateFound.php index 3ed3227e1..d6235e778 100644 --- a/Website/htdocs/mpmanager/app/Exceptions/AccessRates/NoAccessRateFound.php +++ b/Website/htdocs/mpmanager/app/Exceptions/AccessRates/NoAccessRateFound.php @@ -1,12 +1,5 @@ getId(), function () use ($adminData, $company, $plugins, $usageType) { $this->companyDatabaseService->doMigrations(); - $this->companyDatabaseService->runSeeders(); $this->userService->create([ 'name' => $adminData['name'], 'password' => $adminData['password'], diff --git a/Website/htdocs/mpmanager/app/Http/Controllers/DailyTransactions.php b/Website/htdocs/mpmanager/app/Http/Controllers/DailyTransactions.php index 09f7c4b94..dd8607ca5 100644 --- a/Website/htdocs/mpmanager/app/Http/Controllers/DailyTransactions.php +++ b/Website/htdocs/mpmanager/app/Http/Controllers/DailyTransactions.php @@ -1,12 +1,5 @@ map( - function ($file) { - if ($file->getExtension() === 'json') { - return $file->getFilename(); - } - } - ); - - return ApiResource::make($filteredFiles); - } -} diff --git a/Website/htdocs/mpmanager/app/Http/Controllers/PaymentHistoryController.php b/Website/htdocs/mpmanager/app/Http/Controllers/PaymentHistoryController.php index 6e4c7b897..6a857e832 100644 --- a/Website/htdocs/mpmanager/app/Http/Controllers/PaymentHistoryController.php +++ b/Website/htdocs/mpmanager/app/Http/Controllers/PaymentHistoryController.php @@ -1,12 +1,5 @@ userService->create($request->only(['name', 'password', 'email'])); - $companyDatabase = $this->companyDatabaseService->getById($user->getCompanyId()); + $companyDatabase = $this->companyDatabaseService->findByCompanyId($user->getCompanyId()); $databaseProxyData = [ 'email' => $user->getEmail(), 'fk_company_id' => $user->getCompanyId(), diff --git a/Website/htdocs/mpmanager/app/Http/Requests/ClusterRequest.php b/Website/htdocs/mpmanager/app/Http/Requests/ClusterRequest.php index c2a41e0e2..de9467fb0 100644 --- a/Website/htdocs/mpmanager/app/Http/Requests/ClusterRequest.php +++ b/Website/htdocs/mpmanager/app/Http/Requests/ClusterRequest.php @@ -1,12 +1,5 @@ hasMany(User::class); - } + // public function users() + // { + // return $this->hasMany(User::class); + // } // has one company database public function database() diff --git a/Website/htdocs/mpmanager/app/Models/CompanyDatabase.php b/Website/htdocs/mpmanager/app/Models/CompanyDatabase.php index 88cfab917..9bab2d630 100644 --- a/Website/htdocs/mpmanager/app/Models/CompanyDatabase.php +++ b/Website/htdocs/mpmanager/app/Models/CompanyDatabase.php @@ -2,15 +2,16 @@ namespace App\Models; +use App\Models\Base\BaseModelCore; use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Database\Eloquent\Relations\HasOne; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * @property int $id; * @property int $database_name; * @property int $company_id; */ -class CompanyDatabase extends MasterModel +class CompanyDatabase extends BaseModelCore { use HasFactory; @@ -18,9 +19,9 @@ class CompanyDatabase extends MasterModel public const COL_DATABASE_NAME = 'database_name'; public const COL_COMPANY_ID = 'company_id'; - public function company(): HasOne + public function company(): BelongsTo { - return $this->HasOne(Company::class); + return $this->belongsTo(Company::class); } public function findByCompanyId(int $companyId): CompanyDatabase diff --git a/Website/htdocs/mpmanager/app/Models/CompanyJob.php b/Website/htdocs/mpmanager/app/Models/CompanyJob.php index ea96acfd8..ce9c9089d 100644 --- a/Website/htdocs/mpmanager/app/Models/CompanyJob.php +++ b/Website/htdocs/mpmanager/app/Models/CompanyJob.php @@ -2,7 +2,9 @@ namespace App\Models; -class CompanyJob extends MasterModel +use App\Models\Base\BaseModelCore; + +class CompanyJob extends BaseModelCore { public const STATUS_PENDING = 0; public const STATUS_SUCCESS = 1; diff --git a/Website/htdocs/mpmanager/app/Models/ConnectionGroup.php b/Website/htdocs/mpmanager/app/Models/ConnectionGroup.php index a40b58391..ebf0ed231 100644 --- a/Website/htdocs/mpmanager/app/Models/ConnectionGroup.php +++ b/Website/htdocs/mpmanager/app/Models/ConnectionGroup.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\Base\BaseModel; use App\Models\Meter\MeterParameter; use Illuminate\Database\Eloquent\Relations\HasMany; diff --git a/Website/htdocs/mpmanager/app/Models/ConnectionType.php b/Website/htdocs/mpmanager/app/Models/ConnectionType.php index b9a5fdf27..0ff6aea12 100644 --- a/Website/htdocs/mpmanager/app/Models/ConnectionType.php +++ b/Website/htdocs/mpmanager/app/Models/ConnectionType.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\Base\BaseModel; use App\Models\Meter\MeterParameter; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Collection; diff --git a/Website/htdocs/mpmanager/app/Models/Country.php b/Website/htdocs/mpmanager/app/Models/Country.php index 81979c144..4f3fa2088 100644 --- a/Website/htdocs/mpmanager/app/Models/Country.php +++ b/Website/htdocs/mpmanager/app/Models/Country.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\Base\BaseModel; use Illuminate\Database\Eloquent\Relations\HasMany; class Country extends BaseModel diff --git a/Website/htdocs/mpmanager/app/Models/CustomerGroup.php b/Website/htdocs/mpmanager/app/Models/CustomerGroup.php index ce60ee5c5..a0fa71081 100644 --- a/Website/htdocs/mpmanager/app/Models/CustomerGroup.php +++ b/Website/htdocs/mpmanager/app/Models/CustomerGroup.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\Base\BaseModel; use App\Models\Meter\MeterTariff; use App\Models\Person\Person; use Illuminate\Database\Eloquent\Relations\BelongsTo; diff --git a/Website/htdocs/mpmanager/app/Models/DatabaseProxy.php b/Website/htdocs/mpmanager/app/Models/DatabaseProxy.php index 5e93335d5..bb3b2ba08 100644 --- a/Website/htdocs/mpmanager/app/Models/DatabaseProxy.php +++ b/Website/htdocs/mpmanager/app/Models/DatabaseProxy.php @@ -4,12 +4,13 @@ namespace App\Models; +use App\Models\Base\BaseModelCore; use Illuminate\Database\Eloquent\Builder; /** * @property int $fk_company_id */ -class DatabaseProxy extends MasterModel +class DatabaseProxy extends BaseModelCore { public const COL_DATABASE_CONNECTION = 'database_connection'; public const COL_COMPANY_ID = 'fk_company_id'; diff --git a/Website/htdocs/mpmanager/app/Models/Device.php b/Website/htdocs/mpmanager/app/Models/Device.php index f80daded8..353889608 100644 --- a/Website/htdocs/mpmanager/app/Models/Device.php +++ b/Website/htdocs/mpmanager/app/Models/Device.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Models\Address\Address; +use App\Models\Base\BaseModel; use App\Models\Person\Person; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasOne; diff --git a/Website/htdocs/mpmanager/app/Models/EBike.php b/Website/htdocs/mpmanager/app/Models/EBike.php index d61e78c67..0b3839223 100644 --- a/Website/htdocs/mpmanager/app/Models/EBike.php +++ b/Website/htdocs/mpmanager/app/Models/EBike.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\Base\BaseModel; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphOne; diff --git a/Website/htdocs/mpmanager/app/Models/Energy.php b/Website/htdocs/mpmanager/app/Models/Energy.php index e15b087f6..60c049ae1 100644 --- a/Website/htdocs/mpmanager/app/Models/Energy.php +++ b/Website/htdocs/mpmanager/app/Models/Energy.php @@ -2,6 +2,8 @@ namespace App\Models; +use App\Models\Base\BaseModel; + /** * Class Energy. * diff --git a/Website/htdocs/mpmanager/app/Models/GeographicalInformation.php b/Website/htdocs/mpmanager/app/Models/GeographicalInformation.php index 93cf689d1..6c518739a 100644 --- a/Website/htdocs/mpmanager/app/Models/GeographicalInformation.php +++ b/Website/htdocs/mpmanager/app/Models/GeographicalInformation.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\Base\BaseModel; use Illuminate\Database\Eloquent\Relations\MorphTo; /** diff --git a/Website/htdocs/mpmanager/app/Models/History.php b/Website/htdocs/mpmanager/app/Models/History.php index 09881fd63..85ff55636 100644 --- a/Website/htdocs/mpmanager/app/Models/History.php +++ b/Website/htdocs/mpmanager/app/Models/History.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\Base\BaseModel; use Illuminate\Database\Eloquent\Relations\MorphTo; /** diff --git a/Website/htdocs/mpmanager/app/Models/HybridModel.php b/Website/htdocs/mpmanager/app/Models/HybridModel.php deleted file mode 100644 index 1a97ee4be..000000000 --- a/Website/htdocs/mpmanager/app/Models/HybridModel.php +++ /dev/null @@ -1,29 +0,0 @@ -get('database.connections.shard')) { - $this->setConnection('shard'); - } - } -} diff --git a/Website/htdocs/mpmanager/app/Models/Loan/Loan.php b/Website/htdocs/mpmanager/app/Models/Loan/Loan.php index 8c5862c94..e163857fd 100644 --- a/Website/htdocs/mpmanager/app/Models/Loan/Loan.php +++ b/Website/htdocs/mpmanager/app/Models/Loan/Loan.php @@ -2,7 +2,7 @@ namespace App\Models\Loan; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\PaymentHistory; use Illuminate\Database\Eloquent\Relations\HasMany; diff --git a/Website/htdocs/mpmanager/app/Models/Loan/LoanableInterface.php b/Website/htdocs/mpmanager/app/Models/Loan/LoanableInterface.php index 5fcf9728c..916425d39 100644 --- a/Website/htdocs/mpmanager/app/Models/Loan/LoanableInterface.php +++ b/Website/htdocs/mpmanager/app/Models/Loan/LoanableInterface.php @@ -1,12 +1,5 @@ app->bind(IUserService::class, UserService::class); $this->app->bind(ISolarService::class, SolarService::class); // Bind open weather map service to IWeatherDataProvider interface diff --git a/Website/htdocs/mpmanager/app/Relations/BelongsToMorph.php b/Website/htdocs/mpmanager/app/Relations/BelongsToMorph.php index 1a7c872e1..15b4b6137 100644 --- a/Website/htdocs/mpmanager/app/Relations/BelongsToMorph.php +++ b/Website/htdocs/mpmanager/app/Relations/BelongsToMorph.php @@ -1,12 +1,5 @@ + */ class AccessRatePaymentHistoryService implements IAssignationService { - private AccessRate $accessRate; private PaymentHistory $paymentHistory; + private AccessRate $accessRate; - public function setAssigned($paymentHistory) + public function setAssigned($paymentHistory): void { $this->paymentHistory = $paymentHistory; } - public function setAssignee($accessRate) + public function setAssignee($accessRate): void { $this->accessRate = $accessRate; } - public function assign() + public function assign(): PaymentHistory { $this->paymentHistory->paidFor()->associate($this->accessRate); diff --git a/Website/htdocs/mpmanager/app/Services/AccessRatePaymentService.php b/Website/htdocs/mpmanager/app/Services/AccessRatePaymentService.php index 0572dd47a..cd1de7bce 100644 --- a/Website/htdocs/mpmanager/app/Services/AccessRatePaymentService.php +++ b/Website/htdocs/mpmanager/app/Services/AccessRatePaymentService.php @@ -3,24 +3,31 @@ namespace App\Services; use App\Models\AccessRate\AccessRatePayment; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class AccessRatePaymentService implements IBaseService { - public function __construct(private AccessRatePayment $accessRatePayment) - { + public function __construct( + private AccessRatePayment $accessRatePayment + ) { } - public function getById($id) + public function getById(int $id): AccessRatePayment { return $this->accessRatePayment->newQuery()->find($id); } - public function create($accessRatePaymentData) + public function create(array $accessRatePaymentData): AccessRatePayment { return $this->accessRatePayment->newQuery()->create($accessRatePaymentData); } - public function update($accessRatePayment, $accessRatePaymentData) + public function update($accessRatePayment, array $accessRatePaymentData): AccessRatePayment { $accessRatePayment->update($accessRatePaymentData); $accessRatePayment->fresh(); @@ -28,12 +35,12 @@ public function update($accessRatePayment, $accessRatePaymentData) return $accessRatePayment; } - public function delete($accessRatePayment) + public function delete($accessRatePayment): ?bool { return $accessRatePayment->delete(); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { $query = $this->accessRatePayment->newQuery(); diff --git a/Website/htdocs/mpmanager/app/Services/AccessRateService.php b/Website/htdocs/mpmanager/app/Services/AccessRateService.php index 180236fbf..0e5b8e5e4 100644 --- a/Website/htdocs/mpmanager/app/Services/AccessRateService.php +++ b/Website/htdocs/mpmanager/app/Services/AccessRateService.php @@ -3,24 +3,30 @@ namespace App\Services; use App\Models\AccessRate\AccessRate; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class AccessRateService implements IBaseService { - public function __construct(private AccessRate $accessRate) - { + public function __construct( + private AccessRate $accessRate + ) { } - public function getById($accessRateId) + public function getById(int $accessRateId): AccessRate { return $this->accessRate->newQuery()->find($accessRateId); } - public function create($accessRateData) + public function create(array $accessRateData): AccessRate { return $this->accessRate->newQuery()->create($accessRateData); } - public function update($accessRate, $acessRateData) + public function update($accessRate, $acessRateData): AccessRate { $accessRate->update($acessRateData); $accessRate->fresh(); @@ -33,13 +39,13 @@ public function deleteByTariffId($meterTariffId) $this->accessRate->newQuery()->where('tariff_id', $meterTariffId)->delete(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/AddressGeographicalInformationService.php b/Website/htdocs/mpmanager/app/Services/AddressGeographicalInformationService.php index 2ef753e60..7bb67513a 100644 --- a/Website/htdocs/mpmanager/app/Services/AddressGeographicalInformationService.php +++ b/Website/htdocs/mpmanager/app/Services/AddressGeographicalInformationService.php @@ -4,23 +4,27 @@ use App\Models\Address\Address; use App\Models\GeographicalInformation; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class AddressGeographicalInformationService implements IAssignationService { - private Address $address; private GeographicalInformation $geographicInformation; + private Address $address; - public function setAssigned($assigned) + public function setAssigned($assigned): void { $this->geographicInformation = $assigned; } - public function setAssignee($assignee) + public function setAssignee($assignee): void { $this->address = $assignee; } - public function assign() + public function assign(): GeographicalInformation { $this->geographicInformation->owner()->associate($this->address); diff --git a/Website/htdocs/mpmanager/app/Services/AddressesService.php b/Website/htdocs/mpmanager/app/Services/AddressesService.php index e0896a99d..9eb389ea9 100644 --- a/Website/htdocs/mpmanager/app/Services/AddressesService.php +++ b/Website/htdocs/mpmanager/app/Services/AddressesService.php @@ -4,12 +4,21 @@ use App\Models\Address\Address; use App\Models\Address\HasAddressesInterface; +use App\Services\Interfaces\IAssociative; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService
+ * @implements IAssociative
+ */ class AddressesService implements IBaseService, IAssociative { - public function __construct(private Address $address) - { + public function __construct( + private Address $address + ) { } // fills the object and returns it without saving. @@ -45,12 +54,12 @@ public function createAddressDataFromRequest(Request $request): array ]; } - public function getById($id) + public function getById(int $id): Address { return $this->address->newQuery()->findOrFail($id); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->address->newQuery()->paginate($limit); @@ -59,24 +68,24 @@ public function getAll($limit = null) return $this->address->newQuery()->get(); } - public function create($data) + public function create(array $data): Address { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function update($address, $addressData) + public function update($address, array $addressData): Address { $address->update($addressData); return $address; } - public function make($addressData) + public function make($addressData): Address { return $this->address->newQuery()->make([ 'email' => $addressData['email'] ?? null, @@ -88,7 +97,7 @@ public function make($addressData) ]); } - public function save($address) + public function save($address): bool { return $address->save(); } diff --git a/Website/htdocs/mpmanager/app/Services/AgentAppliancePersonService.php b/Website/htdocs/mpmanager/app/Services/AgentAppliancePersonService.php index 8d2a5cdbc..1c2d8edc2 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentAppliancePersonService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentAppliancePersonService.php @@ -4,23 +4,27 @@ use App\Models\Agent; use App\Models\AssetPerson; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class AgentAppliancePersonService implements IAssignationService { - private Agent $agent; private AssetPerson $appliancePerson; + private Agent $agent; - public function setAssigned($appliancePerson) + public function setAssigned($appliancePerson): void { $this->appliancePerson = $appliancePerson; } - public function setAssignee($agent) + public function setAssignee($agent): void { $this->agent = $agent; } - public function assign() + public function assign(): AssetPerson { $this->appliancePerson->creator()->associate($this->agent); diff --git a/Website/htdocs/mpmanager/app/Services/AgentAssignedApplianceHistoryBalanceService.php b/Website/htdocs/mpmanager/app/Services/AgentAssignedApplianceHistoryBalanceService.php index 6f91b7267..23c18ac4d 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentAssignedApplianceHistoryBalanceService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentAssignedApplianceHistoryBalanceService.php @@ -4,23 +4,27 @@ use App\Models\AgentAssignedAppliances; use App\Models\AgentBalanceHistory; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class AgentAssignedApplianceHistoryBalanceService implements IAssignationService { - private AgentAssignedAppliances $agentAssignedAppliance; private AgentBalanceHistory $agentBalanceHistory; + private AgentAssignedAppliances $agentAssignedAppliance; - public function setAssigned($agentBalanceHistory) + public function setAssigned($agentBalanceHistory): void { $this->agentBalanceHistory = $agentBalanceHistory; } - public function setAssignee($agentAssignedAppliance) + public function setAssignee($agentAssignedAppliance): void { $this->agentAssignedAppliance = $agentAssignedAppliance; } - public function assign() + public function assign(): AgentBalanceHistory { $this->agentBalanceHistory->trigger()->associate($this->agentAssignedAppliance); diff --git a/Website/htdocs/mpmanager/app/Services/AgentAssignedApplianceService.php b/Website/htdocs/mpmanager/app/Services/AgentAssignedApplianceService.php index ee0709b89..77c2d7f33 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentAssignedApplianceService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentAssignedApplianceService.php @@ -3,14 +3,21 @@ namespace App\Services; use App\Models\AgentAssignedAppliances; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class AgentAssignedApplianceService implements IBaseService { - public function __construct(private AgentAssignedAppliances $agentAssignedAppliance) - { + public function __construct( + private AgentAssignedAppliances $agentAssignedAppliance + ) { } - public function create($applianceData) + public function create(array $applianceData): AgentAssignedAppliances { return $this->agentAssignedAppliance->newQuery()->create([ 'agent_id' => $applianceData['agent_id'], @@ -20,22 +27,22 @@ public function create($applianceData) ]); } - public function getById($id) + public function getById(int $id): AgentAssignedAppliances { return $this->agentAssignedAppliance->newQuery()->with('applianceType')->find($id); } - public function update($model, $data) + public function update($model, array $data): AgentAssignedAppliances { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null, $agentId = null) + public function getAll(?int $limit = null, ?int $agentId = null): Collection|LengthAwarePaginator { $query = $this->agentAssignedAppliance->newQuery(); diff --git a/Website/htdocs/mpmanager/app/Services/AgentBalanceHistoryService.php b/Website/htdocs/mpmanager/app/Services/AgentBalanceHistoryService.php index cfe866023..79d23b54c 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentBalanceHistoryService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentBalanceHistoryService.php @@ -3,8 +3,16 @@ namespace App\Services; use App\Models\AgentBalanceHistory; +use App\Services\Interfaces\IAssociative; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\DB; +/** + * @implements IBaseService + * @implements IAssociative + */ class AgentBalanceHistoryService implements IBaseService, IAssociative { public function __construct( @@ -13,7 +21,7 @@ public function __construct( ) { } - public function getAll($limit = null, $agentId = null) + public function getAll(?int $limit = null, ?int $agentId = null): Collection|LengthAwarePaginator { $query = $this->agentBalanceHistory->newQuery() ->whereHasMorph( @@ -30,19 +38,19 @@ public function getAll($limit = null, $agentId = null) return $query->latest()->get(); } - public function create($agentBalanceHistoryData) + public function create(array $agentBalanceHistoryData): AgentBalanceHistory { return $this->agentBalanceHistory->newQuery()->create($agentBalanceHistoryData); } - public function make($agentBalanceHistoryData) + public function make(array $agentBalanceHistoryData): AgentBalanceHistory { return $this->agentBalanceHistory->newQuery()->make($agentBalanceHistoryData); } - public function save($agentBalanceHistory) + public function save($agentBalanceHistory): bool { - $agentBalanceHistory->save(); + return $agentBalanceHistory->save(); } public function getLastAgentBalanceHistory($agentId) @@ -176,18 +184,18 @@ public function getAgentRevenuesWeekly($agent): array return $p; } - public function getById($id) + public function getById($id): AgentBalanceHistory { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function update($model, $data) + public function update($model, $data): AgentBalanceHistory { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/AgentChargeHistoryBalanceService.php b/Website/htdocs/mpmanager/app/Services/AgentChargeHistoryBalanceService.php index b281dfc47..e5d6fc27d 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentChargeHistoryBalanceService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentChargeHistoryBalanceService.php @@ -4,23 +4,27 @@ use App\Models\AgentBalanceHistory; use App\Models\AgentCharge; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class AgentChargeHistoryBalanceService implements IAssignationService { - private AgentCharge $agentCharge; private AgentBalanceHistory $agentBalanceHistory; + private AgentCharge $agentCharge; - public function setAssigned($agentBalanceHistory) + public function setAssigned($agentBalanceHistory): void { $this->agentBalanceHistory = $agentBalanceHistory; } - public function setAssignee($agentCharge) + public function setAssignee($agentCharge): void { $this->agentCharge = $agentCharge; } - public function assign() + public function assign(): AgentBalanceHistory { $this->agentBalanceHistory->trigger()->associate($this->agentCharge); diff --git a/Website/htdocs/mpmanager/app/Services/AgentChargeService.php b/Website/htdocs/mpmanager/app/Services/AgentChargeService.php index 1df0548b0..69df4165e 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentChargeService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentChargeService.php @@ -3,35 +3,41 @@ namespace App\Services; use App\Models\AgentCharge; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class AgentChargeService implements IBaseService { - public function __construct(private AgentCharge $agentCharge) - { + public function __construct( + private AgentCharge $agentCharge + ) { } - public function create($agentChargeData) + public function create(array $agentChargeData): AgentCharge { return $this->agentCharge->newQuery()->create($agentChargeData); } - public function getById($id) + public function getById(int $id): AgentCharge { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): AgentCharge { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/AgentCommissionHistoryBalanceService.php b/Website/htdocs/mpmanager/app/Services/AgentCommissionHistoryBalanceService.php index e85bc3bf0..57507f394 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentCommissionHistoryBalanceService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentCommissionHistoryBalanceService.php @@ -4,23 +4,27 @@ use App\Models\AgentBalanceHistory; use App\Models\AgentCommission; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class AgentCommissionHistoryBalanceService implements IAssignationService { - private AgentCommission $agentCommission; private AgentBalanceHistory $agentBalanceHistory; + private AgentCommission $agentCommission; - public function setAssigned($agentBalanceHistory) + public function setAssigned($agentBalanceHistory): void { $this->agentBalanceHistory = $agentBalanceHistory; } - public function setAssignee($agentCommission) + public function setAssignee($agentCommission): void { $this->agentCommission = $agentCommission; } - public function assign() + public function assign(): AgentBalanceHistory { $this->agentBalanceHistory->trigger()->associate($this->agentCommission); diff --git a/Website/htdocs/mpmanager/app/Services/AgentCommissionService.php b/Website/htdocs/mpmanager/app/Services/AgentCommissionService.php index 81c6ca1d6..0781b4246 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentCommissionService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentCommissionService.php @@ -3,28 +3,26 @@ namespace App\Services; use App\Models\AgentCommission; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\Model; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class AgentCommissionService implements IBaseService { - public function __construct(private AgentCommission $agentCommission) - { + public function __construct( + private AgentCommission $agentCommission + ) { } - /** - * @return Model|Builder - */ - public function create($agentCommissiondata) + public function create(array $agentCommissiondata): AgentCommission { return $this->agentCommission->newQuery()->create($agentCommissiondata); } - /** - * @param $agentCommission - * @param array $data - */ - public function update($agentCommission, $agentCommissiondata) + public function update($agentCommission, array $agentCommissiondata): AgentCommission { $agentCommission->update($agentCommissiondata); $agentCommission->fresh(); @@ -32,17 +30,17 @@ public function update($agentCommission, $agentCommissiondata) return $agentCommission; } - public function delete($agentCommission) + public function delete($agentCommission): ?bool { return $agentCommission->delete(); } - public function getById($id) + public function getById(int $id): AgentCommission { return $this->agentCommission->newQuery()->find($id); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->agentCommission->newQuery()->paginate($limit); diff --git a/Website/htdocs/mpmanager/app/Services/AgentReceiptDetailService.php b/Website/htdocs/mpmanager/app/Services/AgentReceiptDetailService.php index 39948f3ef..096034c6b 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentReceiptDetailService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentReceiptDetailService.php @@ -3,11 +3,17 @@ namespace App\Services; use App\Models\AgentReceiptDetail; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class AgentReceiptDetailService implements IBaseService { - public function __construct(private AgentReceiptDetail $agentReceiptDetail) - { + public function __construct( + private AgentReceiptDetail $agentReceiptDetail + ) { } public function getSummary($agentId) @@ -21,28 +27,28 @@ static function ($q) use ($agentId) { )->latest()->firstOrFail()->summary; } - public function getById($id) + public function getById(int $id): AgentReceiptDetail { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function create($agentReceiptDetailData) + public function create(array $agentReceiptDetailData): AgentReceiptDetail { return $this->agentReceiptDetail->create($agentReceiptDetailData); } - public function update($model, $data) + public function update($model, array $data): AgentReceiptDetail { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/AgentReceiptHistoryBalanceService.php b/Website/htdocs/mpmanager/app/Services/AgentReceiptHistoryBalanceService.php index 1d390756b..8eeb63041 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentReceiptHistoryBalanceService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentReceiptHistoryBalanceService.php @@ -4,23 +4,27 @@ use App\Models\AgentBalanceHistory; use App\Models\AgentReceipt; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class AgentReceiptHistoryBalanceService implements IAssignationService { - private AgentReceipt $agentReceipt; private AgentBalanceHistory $agentBalanceHistory; + private AgentReceipt $agentReceipt; - public function setAssigned($agentBalanceHistory) + public function setAssigned($agentBalanceHistory): void { $this->agentBalanceHistory = $agentBalanceHistory; } - public function setAssignee($agentReceipt) + public function setAssignee($agentReceipt): void { $this->agentReceipt = $agentReceipt; } - public function assign() + public function assign(): AgentBalanceHistory { $this->agentBalanceHistory->trigger()->associate($this->agentReceipt); diff --git a/Website/htdocs/mpmanager/app/Services/AgentReceiptService.php b/Website/htdocs/mpmanager/app/Services/AgentReceiptService.php index 34aa4695b..13907a5ee 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentReceiptService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentReceiptService.php @@ -3,14 +3,21 @@ namespace App\Services; use App\Models\AgentReceipt; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class AgentReceiptService implements IBaseService { - public function __construct(private AgentReceipt $agentReceipt) - { + public function __construct( + private AgentReceipt $agentReceipt + ) { } - public function getAll($limit = null, $agentId = null) + public function getAll(?int $limit = null, ?int $agentId = null): Collection|LengthAwarePaginator { $query = $this->agentReceipt->newQuery() ->with(['user', 'agent', 'history']); @@ -30,24 +37,24 @@ function ($q) use ($agentId) { } } - public function create($receiptData) + public function create(array $receiptData): AgentReceipt { return $this->agentReceipt->newQuery()->create($receiptData); } - public function getById($id) + public function getById(int $id): AgentReceipt { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): AgentReceipt { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } public function getLastReceipt($agentId) diff --git a/Website/htdocs/mpmanager/app/Services/AgentService.php b/Website/htdocs/mpmanager/app/Services/AgentService.php index 5277afb1f..5e18b4fd7 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentService.php @@ -6,26 +6,26 @@ use App\Models\Agent; use App\Models\AgentBalanceHistory; use App\Models\AgentReceipt; +use App\Services\Interfaces\IBaseService; use Complex\Exception; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class AgentService implements IBaseService { public function __construct( private Agent $agent, private AgentReceipt $agentReceipt, private AgentBalanceHistory $agentBalanceHistory, - private PeriodService $periodService + private PeriodService $periodService, + private PersonService $personService ) { } - /** - * @param string $email - * - * @return int|string - */ public function resetPassword(string $email) { try { @@ -94,19 +94,19 @@ public function getByAuthenticatedUser() return $this->agent->newQuery()->find(auth('agent_api')->user()->id); } - public function getById($id) + public function getById(int $id): Agent { return $this->agent->newQuery() ->with(['person', 'person.addresses', 'miniGrid', 'commission']) ->where('id', $id)->firstOrFail(); } - public function delete($agent) + public function delete($agent): ?bool { return $agent->delete(); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->agent->newQuery() @@ -120,7 +120,7 @@ public function getAll($limit = null) } public function create( - $agentData, + array $agentData, $addressData = null, $personData = null, $country = null, @@ -128,7 +128,7 @@ public function create( $countryService = null, $personService = null, $personAddressService = null, - ) { + ): Agent { $person = $personService->create($personData); if ($country !== null) { @@ -146,22 +146,16 @@ public function create( return $this->agent->newQuery()->create($agentData); } - /** - * @param $agent - * @param $data - * - * @return Model|Builder - */ - public function update($agent, $agentData, $personService = null) + public function update($agent, array $agentData): Agent { - $person = $personService->getById($agentData['personId']); + $person = $this->personService->getById($agentData['personId']); $personData = [ 'name' => $agentData['name'], 'surname' => $agentData['surname'], 'sex' => $agentData['gender'], 'birth_date' => $agentData['birthday'], ]; - $person = $personService->update($person, $personData); + $person = $this->personService->update($person, $personData); $address = $person->addresses()->where('is_primary', 1)->first(); $address->phone = $agentData['phone']; $address->update(); diff --git a/Website/htdocs/mpmanager/app/Services/AgentSoldApplianceService.php b/Website/htdocs/mpmanager/app/Services/AgentSoldApplianceService.php index 68847a69c..f385a2b19 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentSoldApplianceService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentSoldApplianceService.php @@ -5,7 +5,13 @@ use App\Models\Agent; use App\Models\AgentSoldAppliance; use App\Models\AssetPerson; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class AgentSoldApplianceService implements IBaseService { public function __construct( @@ -14,12 +20,12 @@ public function __construct( ) { } - public function create($applianceData) + public function create($applianceData): AgentSoldAppliance { return $this->agentSoldAppliance->newQuery()->create($applianceData); } - public function getById($agentId, $customerId = null) + public function getById(int $agentId, ?int $customerId = null): AgentSoldAppliance { return $this->assetPerson->newQuery()->with(['person', 'assetType', 'rates']) ->whereHasMorph( @@ -31,21 +37,28 @@ function ($q) use ($agentId) { ) ->where('person_id', $customerId) ->latest() - ->paginate(); + // Not sure why it want to return a paginate here. + // Commenting out for now to return a singleton. + // ->paginate(); + ->first(); } - public function update($model, $data) + public function update($model, array $data): AgentSoldAppliance { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null, $agentId = null, $customerId = null, $forApp = false) - { + public function getAll( + ?int $limit = null, + $agentId = null, + $customerId = null, + $forApp = false + ): Collection|LengthAwarePaginator { if ($forApp) { return $this->list($agentId); } diff --git a/Website/htdocs/mpmanager/app/Services/AgentTicketService.php b/Website/htdocs/mpmanager/app/Services/AgentTicketService.php index d0700815c..769ac940e 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentTicketService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentTicketService.php @@ -3,24 +3,28 @@ namespace App\Services; use App\Models\Agent; +use App\Services\Interfaces\IAssignationService; use Inensus\Ticket\Models\Ticket; +/** + * @implements IAssignationService + */ class AgentTicketService implements IAssignationService { - private Agent $agent; private Ticket $ticket; + private Agent $agent; - public function setAssigned($ticket) + public function setAssigned($ticket): void { $this->ticket = $ticket; } - public function setAssignee($agent) + public function setAssignee($agent): void { $this->agent = $agent; } - public function assign() + public function assign(): Ticket { $this->ticket->creator()->associate($this->agent); diff --git a/Website/htdocs/mpmanager/app/Services/AgentTransactionHistoryBalanceService.php b/Website/htdocs/mpmanager/app/Services/AgentTransactionHistoryBalanceService.php index bf4033160..0fa694703 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentTransactionHistoryBalanceService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentTransactionHistoryBalanceService.php @@ -4,23 +4,27 @@ use App\Models\AgentBalanceHistory; use App\Models\Transaction\AgentTransaction; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class AgentTransactionHistoryBalanceService implements IAssignationService { - private AgentTransaction $agentTransaction; private AgentBalanceHistory $agentBalanceHistory; + private AgentTransaction $agentTransaction; - public function setAssigned($agentBalanceHistory) + public function setAssigned($agentBalanceHistory): void { $this->agentBalanceHistory = $agentBalanceHistory; } - public function setAssignee($agentTransaction) + public function setAssignee($agentTransaction): void { $this->agentTransaction = $agentTransaction; } - public function assign() + public function assign(): AgentBalanceHistory { $this->agentBalanceHistory->trigger()->associate($this->agentTransaction); diff --git a/Website/htdocs/mpmanager/app/Services/AgentTransactionService.php b/Website/htdocs/mpmanager/app/Services/AgentTransactionService.php index 59f6526b4..e274016ae 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentTransactionService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentTransactionService.php @@ -5,7 +5,13 @@ use App\Models\Device; use App\Models\Transaction\AgentTransaction; use App\Models\Transaction\Transaction; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class AgentTransactionService implements IBaseService { public function __construct( @@ -15,8 +21,11 @@ public function __construct( ) { } - public function getAll($limit = null, $agentId = null, $forApp = false) - { + public function getAll( + ?int $limit = null, + $agentId = null, + $forApp = false + ): Collection|LengthAwarePaginator { $query = $this->transaction->newQuery(); if ($forApp) { @@ -40,7 +49,7 @@ static function ($q) use ($agentId) { return $query->get(); } - public function getById($agentId, $customerId = null) + public function getById(int $agentId, ?int $customerId = null): AgentTransaction { $customerDeviceSerials = $this->device->newQuery()->where('person_id', $customerId) ->get()->pluck('device_serial'); @@ -57,21 +66,25 @@ public function getById($agentId, $customerId = null) fn ($q) => $q->where('agent_id', $agentId) ) ->whereHas('device', fn ($q) => $q->whereIn('device_serial', $customerDeviceSerials)) - ->latest()->paginate(); + ->latest() + // Not sure why it want to return a paginate here. + // Commenting out for now to return a singleton. + // ->paginate(); + ->first(); } - public function create($transactionData) + public function create(array $transactionData): AgentTransaction { return $this->agentTransaction->newQuery()->create($transactionData); } - public function update($model, $data) + public function update($model, array $data): AgentTransaction { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/AgentTransactionTransactionService.php b/Website/htdocs/mpmanager/app/Services/AgentTransactionTransactionService.php index 216676b01..a2901f2a3 100644 --- a/Website/htdocs/mpmanager/app/Services/AgentTransactionTransactionService.php +++ b/Website/htdocs/mpmanager/app/Services/AgentTransactionTransactionService.php @@ -4,23 +4,27 @@ use App\Models\Transaction\AgentTransaction; use App\Models\Transaction\Transaction; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class AgentTransactionTransactionService implements IAssignationService { - private AgentTransaction $agentTransaction; private Transaction $transaction; + private AgentTransaction $agentTransaction; - public function setAssigned($transaction) + public function setAssigned($transaction): void { $this->transaction = $transaction; } - public function setAssignee($agentTransaction) + public function setAssignee($agentTransaction): void { $this->agentTransaction = $agentTransaction; } - public function assign() + public function assign(): Transaction { $this->transaction->originalTransaction()->associate($this->agentTransaction); diff --git a/Website/htdocs/mpmanager/app/Services/AppliancePersonService.php b/Website/htdocs/mpmanager/app/Services/AppliancePersonService.php index 2505913d8..bb6222603 100644 --- a/Website/htdocs/mpmanager/app/Services/AppliancePersonService.php +++ b/Website/htdocs/mpmanager/app/Services/AppliancePersonService.php @@ -7,7 +7,15 @@ use App\Models\AssetPerson; use App\Models\AssetType; use App\Models\MainSettings; - +use App\Services\Interfaces\IAssociative; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; + +/** + * @implements IBaseService + * @implements IAssociative + */ class AppliancePersonService implements IBaseService, IAssociative { public function __construct( @@ -17,14 +25,14 @@ public function __construct( ) { } - public function make($data) + public function make(array $data): AssetPerson { return $this->assetPerson->newQuery()->make($data); } - public function save($appliancePerson) + public function save($appliancePerson): bool { - $appliancePerson->save(); + return $appliancePerson->save(); } private function checkDownPaymentIsBigger($downPayment, $cost) @@ -162,27 +170,27 @@ public function getLoansForCustomerId($customerId) return $this->assetPerson->newQuery()->where('person_id', $customerId); } - public function getById($id) + public function getById(int $id): AssetPerson { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function create($data) + public function create(array $data): AssetPerson { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): AssetPerson { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->assetPerson->newQuery()->with(['person.devices'])->paginate($limit); diff --git a/Website/htdocs/mpmanager/app/Services/ApplianceRatePaymentHistoryService.php b/Website/htdocs/mpmanager/app/Services/ApplianceRatePaymentHistoryService.php index 2d621e019..a532e78e4 100644 --- a/Website/htdocs/mpmanager/app/Services/ApplianceRatePaymentHistoryService.php +++ b/Website/htdocs/mpmanager/app/Services/ApplianceRatePaymentHistoryService.php @@ -4,23 +4,27 @@ use App\Models\AssetRate; use App\Models\PaymentHistory; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class ApplianceRatePaymentHistoryService implements IAssignationService { - private AssetRate $assetRate; private PaymentHistory $paymentHistory; + private AssetRate $assetRate; - public function setAssigned($paymentHistory) + public function setAssigned($paymentHistory): void { $this->paymentHistory = $paymentHistory; } - public function setAssignee($assetRate) + public function setAssignee($assetRate): void { $this->assetRate = $assetRate; } - public function assign() + public function assign(): PaymentHistory { $this->paymentHistory->paidFor()->associate($this->assetRate); diff --git a/Website/htdocs/mpmanager/app/Services/ApplianceRateService.php b/Website/htdocs/mpmanager/app/Services/ApplianceRateService.php index 6a64d28a0..9c688a014 100644 --- a/Website/htdocs/mpmanager/app/Services/ApplianceRateService.php +++ b/Website/htdocs/mpmanager/app/Services/ApplianceRateService.php @@ -9,7 +9,9 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; -class ApplianceRateService implements IBaseService +// FIXME: +// class ApplianceRateService implements IBaseService +class ApplianceRateService { public function __construct( private AssetRate $applianceRate, @@ -87,9 +89,9 @@ public function getAllByLoanId($loanId): Collection ->get(); } - public function getById($id) + public function getById(int $id): AssetRate { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } public function create($assetPerson, $installmentType = 'monthly'): void @@ -132,19 +134,19 @@ public function create($assetPerson, $installmentType = 'monthly'): void } } - public function update($model, $data) + public function update($model, array $data): AssetRate { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } public function getDownPaymentAsAssetRate($assetPerson): ?AssetRate diff --git a/Website/htdocs/mpmanager/app/Services/CityGeographicalInformationService.php b/Website/htdocs/mpmanager/app/Services/CityGeographicalInformationService.php index 03689efd6..06b0d3bdc 100644 --- a/Website/htdocs/mpmanager/app/Services/CityGeographicalInformationService.php +++ b/Website/htdocs/mpmanager/app/Services/CityGeographicalInformationService.php @@ -4,23 +4,27 @@ use App\Models\City; use App\Models\GeographicalInformation; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class CityGeographicalInformationService implements IAssignationService { - private City $city; private GeographicalInformation $geographicInformation; + private City $city; - public function setAssigned($assigned) + public function setAssigned($assigned): void { $this->geographicInformation = $assigned; } - public function setAssignee($assignee) + public function setAssignee($assignee): void { $this->city = $assignee; } - public function assign() + public function assign(): GeographicalInformation { $this->geographicInformation->owner()->associate($this->city); diff --git a/Website/htdocs/mpmanager/app/Services/CityService.php b/Website/htdocs/mpmanager/app/Services/CityService.php index e89eba667..4f63a969b 100644 --- a/Website/htdocs/mpmanager/app/Services/CityService.php +++ b/Website/htdocs/mpmanager/app/Services/CityService.php @@ -1,20 +1,20 @@ + */ class CityService implements IBaseService { - public function __construct(private City $city) - { + public function __construct( + private City $city + ) { } public function getCityIdsByMiniGridId($miniGridId): array @@ -27,12 +27,12 @@ public function getByIdWithRelation($cityId, $relation) return $this->city->newQuery()->with($relation)->find($cityId); } - public function getById($cityId) + public function getById($cityId): City { return $this->city->newQuery()->find($cityId); } - public function update($city, $cityData) + public function update($city, array $cityData): City { $city->update([ 'name' => $cityData['name'] ?? $city->name, @@ -45,12 +45,12 @@ public function update($city, $cityData) return $city; } - public function create($data) + public function create(array $data): City { return $this->city->newQuery()->create($data); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->city->newQuery()->with('location')->paginate($limit); @@ -59,7 +59,7 @@ public function getAll($limit = null) return $this->city->newQuery()->with('location')->get(); } - public function delete($model) + public function delete($model): ?bool { throw new \Exception('not implemented'); } diff --git a/Website/htdocs/mpmanager/app/Services/ClusterService.php b/Website/htdocs/mpmanager/app/Services/ClusterService.php index 1ca2394a6..7b7f0e98f 100644 --- a/Website/htdocs/mpmanager/app/Services/ClusterService.php +++ b/Website/htdocs/mpmanager/app/Services/ClusterService.php @@ -3,8 +3,13 @@ namespace App\Services; use App\Models\Cluster; +use App\Services\Interfaces\IBaseService; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class ClusterService implements IBaseService { public function __construct( @@ -75,12 +80,12 @@ public function getById($clusterId): Cluster return $this->cluster->newQuery()->with(['miniGrids.location', 'cities'])->find($clusterId); } - public function create($clusterData) + public function create(array $clusterData): Cluster { return $this->cluster->newQuery()->create($clusterData); } - public function getAll($limit = null): Collection + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit !== null) { return $this->cluster->newQuery()->with('miniGrids')->limit($limit)->get(); @@ -89,13 +94,15 @@ public function getAll($limit = null): Collection return $this->cluster->newQuery()->with('miniGrids')->get(); } - public function update($model, $data) + public function update($model, array $data): Cluster { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); + + return new Cluster(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/CompanyDatabaseService.php b/Website/htdocs/mpmanager/app/Services/CompanyDatabaseService.php index 4a428f139..d19aa459d 100644 --- a/Website/htdocs/mpmanager/app/Services/CompanyDatabaseService.php +++ b/Website/htdocs/mpmanager/app/Services/CompanyDatabaseService.php @@ -3,25 +3,29 @@ namespace App\Services; use App\Models\CompanyDatabase; -use Database\Seeders\DatabaseSeeder; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\Artisan; use MPM\DatabaseProxy\DatabaseProxyManagerService; +/** + * @implements IBaseService + */ class CompanyDatabaseService implements IBaseService { - public function __construct(private CompanyDatabase $companyDatabase) - { + public function __construct( + private CompanyDatabase $companyDatabase + ) { } - public function getById($id): CompanyDatabase + public function getById(int $id): CompanyDatabase { - /** @var CompanyDatabase $result */ $result = $this->companyDatabase->newQuery()->find($id); return $result; } - public function create($data): CompanyDatabase + public function create(array $data): CompanyDatabase { /** @var CompanyDatabase $result */ $result = $this->companyDatabase->newQuery()->create($data); @@ -29,19 +33,21 @@ public function create($data): CompanyDatabase return $result; } - public function update($model, $data): void + public function update($model, array $data): CompanyDatabase { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); + + return new CompanyDatabase(); } - public function delete($model): void + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method update() not yet implemented.'); } - public function getAll($limit = null): void + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } public function createNewDatabaseForCompany(string $databaseName, int $companyId): void @@ -60,14 +66,6 @@ public function doMigrations(): void ]); } - public function runSeeders(): void - { - Artisan::call('db:seed', [ - '--force' => true, - '--class' => DatabaseSeeder::class, - ]); - } - public function addPluginSpecificMenuItemsToCompanyDatabase($plugin, ?int $companyId = null): void { $rootClass = $plugin['root_class']; diff --git a/Website/htdocs/mpmanager/app/Services/CompanyService.php b/Website/htdocs/mpmanager/app/Services/CompanyService.php index dab793a9c..367e8020b 100644 --- a/Website/htdocs/mpmanager/app/Services/CompanyService.php +++ b/Website/htdocs/mpmanager/app/Services/CompanyService.php @@ -3,11 +3,17 @@ namespace App\Services; use App\Models\Company; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class CompanyService implements IBaseService { - public function __construct(private Company $company) - { + public function __construct( + private Company $company + ) { } public function getByName($name): Company @@ -22,7 +28,6 @@ public function getByDatabaseProxy($databaseProxy): Company public function getById($id): Company { - /** @var Company $result */ $result = $this->company->newQuery()->findOrFail($id); return $result; @@ -30,24 +35,23 @@ public function getById($id): Company public function create($data): Company { - /** @var Company $company */ $company = $this->company->newQuery()->create($data); return $company; } - public function update($model, $data) + public function update($model, array $data): Company { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/ConnectionGroupService.php b/Website/htdocs/mpmanager/app/Services/ConnectionGroupService.php index 91d14f474..b432cfa51 100644 --- a/Website/htdocs/mpmanager/app/Services/ConnectionGroupService.php +++ b/Website/htdocs/mpmanager/app/Services/ConnectionGroupService.php @@ -3,26 +3,30 @@ namespace App\Services; use App\Models\ConnectionGroup; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\Model; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; -class ConnectionGroupService implements IBaseService +/** + * @implements IBaseService + */ class ConnectionGroupService implements IBaseService { - public function __construct(private ConnectionGroup $connectionGroup) - { + public function __construct( + private ConnectionGroup $connectionGroup + ) { } - public function create($connectionGroupData) + public function create(array $connectionGroupData): ConnectionGroup { return $this->connectionGroup->newQuery()->create($connectionGroupData); } - public function getById($connectionGroupId) + public function getById(int $connectionGroupId): ConnectionGroup { return $this->connectionGroup->newQuery()->findOrFail($connectionGroupId); } - public function update($connectionGroup, $connectionGroupData): Model|Builder + public function update($connectionGroup, array $connectionGroupData): ConnectionGroup { $connectionGroup->update($connectionGroupData); $connectionGroup->fresh(); @@ -30,7 +34,7 @@ public function update($connectionGroup, $connectionGroupData): Model|Builder return $connectionGroup; } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->connectionGroup->newQuery()->paginate($limit); @@ -39,8 +43,8 @@ public function getAll($limit = null) return $this->connectionGroup->newQuery()->get(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/ConnectionTypeService.php b/Website/htdocs/mpmanager/app/Services/ConnectionTypeService.php index 96433e2c5..122267166 100644 --- a/Website/htdocs/mpmanager/app/Services/ConnectionTypeService.php +++ b/Website/htdocs/mpmanager/app/Services/ConnectionTypeService.php @@ -3,13 +3,20 @@ namespace App\Services; use App\Models\ConnectionType; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Query\Builder; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class ConnectionTypeService implements IBaseService { - public function __construct(private ConnectionType $connectionType) - { + public function __construct( + private ConnectionType $connectionType + ) { } public function getByIdWithMeterCountRelation($connectionTypeId): Model|Builder @@ -18,17 +25,17 @@ public function getByIdWithMeterCountRelation($connectionTypeId): Model|Builder ->firstOrFail(); } - public function getById($connectionTypeId) + public function getById(int $connectionTypeId): ConnectionType { return $this->connectionType->newQuery()->findOrFail($connectionTypeId); } - public function create($connectionServiceData) + public function create(array $connectionServiceData): ConnectionType { return $this->connectionType->newQuery()->create($connectionServiceData); } - public function update($connectionType, $connectionTypeData) + public function update($connectionType, array $connectionTypeData): ConnectionType { $connectionType->update($connectionTypeData); $connectionType->fresh(); @@ -36,7 +43,7 @@ public function update($connectionType, $connectionTypeData) return $connectionType; } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->connectionType->newQuery()->paginate($limit); @@ -45,8 +52,8 @@ public function getAll($limit = null) return $this->connectionType->newQuery()->get(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/CountryService.php b/Website/htdocs/mpmanager/app/Services/CountryService.php index c16b65519..7a5380268 100644 --- a/Website/htdocs/mpmanager/app/Services/CountryService.php +++ b/Website/htdocs/mpmanager/app/Services/CountryService.php @@ -3,11 +3,17 @@ namespace App\Services; use App\Models\Country; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class CountryService implements IBaseService { - public function __construct(private Country $country) - { + public function __construct( + private Country $country + ) { } public function getByCode(?string $countryCode) @@ -15,28 +21,28 @@ public function getByCode(?string $countryCode) return $countryCode !== null ? $this->country->where('country_code', $countryCode)->first() : $countryCode; } - public function getById($id) + public function getById(int $id): Country { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function create($data) + public function create(array $data): Country { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): Country { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/DatabaseProxyService.php b/Website/htdocs/mpmanager/app/Services/DatabaseProxyService.php index 895fcf07b..d0d6b558c 100644 --- a/Website/htdocs/mpmanager/app/Services/DatabaseProxyService.php +++ b/Website/htdocs/mpmanager/app/Services/DatabaseProxyService.php @@ -3,35 +3,42 @@ namespace App\Services; use App\Models\DatabaseProxy; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class DatabaseProxyService implements IBaseService { public function __construct(private DatabaseProxy $databaseProxy) { } - public function getById($id) + public function getById($id): DatabaseProxy { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); + + return new DatabaseProxy(); } - public function create($databaseProxyData) + public function create(array $databaseProxyData): DatabaseProxy { return $this->databaseProxy->newQuery()->create($databaseProxyData); } - public function update($model, $data) + public function update($model, array $data): DatabaseProxy { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/GeographicalInformationService.php b/Website/htdocs/mpmanager/app/Services/GeographicalInformationService.php index dce363644..3b98e5f86 100644 --- a/Website/htdocs/mpmanager/app/Services/GeographicalInformationService.php +++ b/Website/htdocs/mpmanager/app/Services/GeographicalInformationService.php @@ -3,7 +3,15 @@ namespace App\Services; use App\Models\GeographicalInformation; +use App\Services\Interfaces\IAssociative; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + * @implements IAssociative + */ class GeographicalInformationService implements IBaseService, IAssociative { public function __construct( @@ -22,39 +30,42 @@ public function changeOwnerWithAddress($meterParameter, $addressId) } } - public function getById($id) + public function getById(int $id): GeographicalInformation { return $this->geographicalInformation->newQuery()->find($id); } - public function delete($model) + public function delete($model): ?bool { - $model->delete(); + return $model->delete(); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { return $this->geographicalInformation->newQuery()->get(); } - public function create($data) + public function create(array $data): GeographicalInformation { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): GeographicalInformation { - return $model->newQuery()->update($data); + $model->update($data); + $model->fresh(); + + return $model; } - public function make($geographicalInformationData) + public function make($geographicalInformationData): GeographicalInformation { return $this->geographicalInformation->newQuery()->make([ 'points' => $geographicalInformationData['points'], ]); } - public function save($geographicalInformation) + public function save($geographicalInformation): bool { return $geographicalInformation->save(); } diff --git a/Website/htdocs/mpmanager/app/Services/IAddressService.php b/Website/htdocs/mpmanager/app/Services/IAddressService.php deleted file mode 100644 index 51cc69cf5..000000000 --- a/Website/htdocs/mpmanager/app/Services/IAddressService.php +++ /dev/null @@ -1,10 +0,0 @@ -|Collection|LengthAwarePaginator */ + public function getAll(?int $limit = null): Collection|LengthAwarePaginator; +} diff --git a/Website/htdocs/mpmanager/app/Services/Interfaces/ISettingsService.php b/Website/htdocs/mpmanager/app/Services/Interfaces/ISettingsService.php new file mode 100644 index 000000000..37a6f47a3 --- /dev/null +++ b/Website/htdocs/mpmanager/app/Services/Interfaces/ISettingsService.php @@ -0,0 +1,23 @@ + + */ +// FIXME: Should this not be a ISettingsService? class MainSettingsService implements IBaseService { - public function __construct(private MainSettings $mainSettings) - { + public function __construct( + private MainSettings $mainSettings + ) { } - public function getById($id) + public function getById(int $id): MainSettings { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); + + return new MainSettings(); } - public function create($data) + public function create(array $data): MainSettings { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); + + return new MainSettings(); } - public function update($mainSettings, $mainSettingsData) + public function update($mainSettings, $mainSettingsData): MainSettings { $mainSettings->update($mainSettingsData); $mainSettings->fresh(); @@ -28,12 +40,12 @@ public function update($mainSettings, $mainSettingsData) return $mainSettings; } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { return $this->mainSettings->newQuery()->get(); } diff --git a/Website/htdocs/mpmanager/app/Services/MaintenanceUserService.php b/Website/htdocs/mpmanager/app/Services/MaintenanceUserService.php index e87baf27e..3c176de6e 100644 --- a/Website/htdocs/mpmanager/app/Services/MaintenanceUserService.php +++ b/Website/htdocs/mpmanager/app/Services/MaintenanceUserService.php @@ -3,11 +3,17 @@ namespace App\Services; use App\Models\MaintenanceUsers; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class MaintenanceUserService implements IBaseService { - public function __construct(private MaintenanceUsers $maintenanceUser) - { + public function __construct( + private MaintenanceUsers $maintenanceUser + ) { } public function getMaintenanceUsersCount() @@ -15,28 +21,28 @@ public function getMaintenanceUsersCount() return $this->maintenanceUser->newQuery()->count(); } - public function create($maintenanceUserData) + public function create(array $maintenanceUserData): MaintenanceUsers { return $this->maintenanceUser->newQuery()->create($maintenanceUserData); } - public function getById($id) + public function getById(int $id): MaintenanceUsers { return $this->maintenanceUser->newQuery()->find($id); } - public function update($model, $data) + public function update($model, array $data): MaintenanceUsers { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/MaintenanceUserTicketService.php b/Website/htdocs/mpmanager/app/Services/MaintenanceUserTicketService.php index 98fd7ca5d..4544f06f3 100644 --- a/Website/htdocs/mpmanager/app/Services/MaintenanceUserTicketService.php +++ b/Website/htdocs/mpmanager/app/Services/MaintenanceUserTicketService.php @@ -3,24 +3,28 @@ namespace App\Services; use App\Models\MaintenanceUsers; +use App\Services\Interfaces\IAssignationService; use Inensus\Ticket\Models\Ticket; +/** + * @implements IAssignationService + */ class MaintenanceUserTicketService implements IAssignationService { private Ticket $ticket; private MaintenanceUsers $maintenanceUser; - public function setAssigned($ticket) + public function setAssigned($ticket): void { $this->ticket = $ticket; } - public function setAssignee($maintenanceUser) + public function setAssignee($maintenanceUser): void { $this->maintenanceUser = $maintenanceUser; } - public function assign() + public function assign(): Ticket { $this->ticket->owner()->associate($this->maintenanceUser); diff --git a/Website/htdocs/mpmanager/app/Services/ManufacturerAddressService.php b/Website/htdocs/mpmanager/app/Services/ManufacturerAddressService.php index 9d37dd066..8397a7eb6 100644 --- a/Website/htdocs/mpmanager/app/Services/ManufacturerAddressService.php +++ b/Website/htdocs/mpmanager/app/Services/ManufacturerAddressService.php @@ -4,23 +4,27 @@ use App\Models\Address\Address; use App\Models\Manufacturer; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class ManufacturerAddressService implements IAssignationService { private Address $address; private Manufacturer $manufacturer; - public function setAssigned($address) + public function setAssigned($address): void { $this->address = $address; } - public function setAssignee($manufacturer) + public function setAssignee($manufacturer): void { $this->manufacturer = $manufacturer; } - public function assign() + public function assign(): Address { $this->address->owner()->associate($this->manufacturer); diff --git a/Website/htdocs/mpmanager/app/Services/ManufacturerService.php b/Website/htdocs/mpmanager/app/Services/ManufacturerService.php index 144731db2..5d5453996 100644 --- a/Website/htdocs/mpmanager/app/Services/ManufacturerService.php +++ b/Website/htdocs/mpmanager/app/Services/ManufacturerService.php @@ -3,12 +3,19 @@ namespace App\Services; use App\Models\Manufacturer; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class ManufacturerService implements IBaseService { - public function __construct(private Manufacturer $manufacturer) - { + public function __construct( + private Manufacturer $manufacturer + ) { } public function createManufacturerDataFromRequest(Request $request): array @@ -21,17 +28,17 @@ public function createManufacturerDataFromRequest(Request $request): array ]; } - public function getById($manufacturerId) + public function getById(int $manufacturerId): Manufacturer { return $this->manufacturer->newQuery()->with(['address.city.country'])->findOrFail($manufacturerId); } - public function create($manufacturerData) + public function create(array $manufacturerData): Manufacturer { return $this->manufacturer->newQuery()->create($manufacturerData); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->manufacturer->newQuery()->paginate($limit); @@ -45,13 +52,13 @@ public function getByName($manufacturerName) return $this->manufacturer->newQuery()->where('name', $manufacturerName)->first(); } - public function update($model, $data) + public function update($model, array $data): Manufacturer { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/MenuItemsService.php b/Website/htdocs/mpmanager/app/Services/MenuItemsService.php index 81a548831..132715150 100644 --- a/Website/htdocs/mpmanager/app/Services/MenuItemsService.php +++ b/Website/htdocs/mpmanager/app/Services/MenuItemsService.php @@ -4,16 +4,22 @@ use App\Models\MenuItems; use App\Models\SubMenuItems; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Support\Collection; +/** + * @implements IBaseService + */ class MenuItemsService implements IBaseService { - public function __construct(private MenuItems $menuItems, private SubMenuItems $subMenuItems) + public function __construct( + private MenuItems $menuItems, + private SubMenuItems $subMenuItems) { } - public function getAll($limit = null): LengthAwarePaginator|Collection + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->menuItems->newQuery()->with('SubMenuItems')->orderBy('menu_order')->paginate($limit); @@ -82,12 +88,12 @@ public function getByName($name) return $this->menuItems->newQuery()->where('name', $name)->first(); } - public function getById($id) + public function getById(int $id): MenuItems { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function create($data) + public function create($data): MenuItems { $lastOrder = $this->menuItems->newQuery()->latest()->first(); $data['menu_order'] = $lastOrder ? $lastOrder->menu_order + 1 : 1; @@ -95,12 +101,12 @@ public function create($data) return $this->menuItems->newQuery()->create($data); } - public function update($model, $data) + public function update($model, $data): MenuItems { throw new \Exception('not implemented'); } - public function delete($model) + public function delete($model): ?bool { throw new \Exception('not implemented'); } diff --git a/Website/htdocs/mpmanager/app/Services/MeterConsumptionService.php b/Website/htdocs/mpmanager/app/Services/MeterConsumptionService.php index decd10652..1a91701c3 100644 --- a/Website/htdocs/mpmanager/app/Services/MeterConsumptionService.php +++ b/Website/htdocs/mpmanager/app/Services/MeterConsumptionService.php @@ -4,12 +4,17 @@ use App\Models\Meter\Meter; use App\Models\Meter\MeterConsumption; +use App\Services\Interfaces\IBaseService; use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class MeterConsumptionService implements IBaseService { - public function __construct(private MeterConsumption $meterConsumption) - { + public function __construct( + private MeterConsumption $meterConsumption + ) { } public function getByMeter(Meter $meter, $start, $end): Collection|array @@ -21,28 +26,28 @@ public function getByMeter(Meter $meter, $start, $end): Collection|array )->orderBy('reading_date')->get(); } - public function getById($id) + public function getById(int $id): MeterConsumption { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function create($data) + public function create(array $data): MeterConsumption { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): MeterConsumption { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/MeterParameterAddressService.php b/Website/htdocs/mpmanager/app/Services/MeterParameterAddressService.php index 0c519015c..8948c9259 100644 --- a/Website/htdocs/mpmanager/app/Services/MeterParameterAddressService.php +++ b/Website/htdocs/mpmanager/app/Services/MeterParameterAddressService.php @@ -4,18 +4,22 @@ use App\Models\Address\Address; use App\Models\Meter\MeterParameter; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class MeterParameterAddressService implements IAssignationService { - private Address $address; private MeterParameter $meterParameter; + private Address $address; - public function setAssignee($meterParameter) + public function setAssignee($meterParameter): void { $this->meterParameter = $meterParameter; } - public function setAssigned($address) + public function setAssigned($address): void { $this->address = $address; } diff --git a/Website/htdocs/mpmanager/app/Services/MeterService.php b/Website/htdocs/mpmanager/app/Services/MeterService.php index 90272ccfc..9a4a01ab9 100644 --- a/Website/htdocs/mpmanager/app/Services/MeterService.php +++ b/Website/htdocs/mpmanager/app/Services/MeterService.php @@ -3,13 +3,18 @@ namespace App\Services; use App\Models\Meter\Meter; -use Illuminate\Contracts\Pagination\LengthAwarePaginator; +use App\Services\Interfaces\IBaseService; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class MeterService implements IBaseService { - public function __construct(private Meter $meter) - { + public function __construct( + private Meter $meter + ) { } public function getBySerialNumber($serialNumber) @@ -65,7 +70,7 @@ function ($q) use ($cities) { ->where('in_use', 1)->get(); } - public function create($meterData) + public function create(array $meterData): Meter { return $this->meter->newQuery()->create([ 'serial_number' => $meterData['serial_number'], @@ -78,7 +83,7 @@ public function create($meterData) ]); } - public function getById($meterId) + public function getById(int $meterId): Meter { return $this->meter->newQuery()->with([ 'tariff', @@ -90,12 +95,12 @@ public function getById($meterId) ])->find($meterId); } - public function delete($meter) + public function delete($meter): ?bool { return $meter->delete(); } - public function getAll($limit = null, $inUse = true) + public function getAll(?int $limit = null, $inUse = true): LengthAwarePaginator { if (isset($inUse)) { return $this->meter->newQuery()->with(['meterType', 'tariff'])->where( @@ -107,7 +112,7 @@ public function getAll($limit = null, $inUse = true) return $this->meter->newQuery()->with(['meterType', 'tariff'])->paginate($limit); } - public function update($meter, $meterData) + public function update($meter, array $meterData): Meter { $meter->update($meterData); $meter->fresh(); diff --git a/Website/htdocs/mpmanager/app/Services/MeterTariffMeterParameterService.php b/Website/htdocs/mpmanager/app/Services/MeterTariffMeterParameterService.php index d2c3228d3..13f424eb2 100644 --- a/Website/htdocs/mpmanager/app/Services/MeterTariffMeterParameterService.php +++ b/Website/htdocs/mpmanager/app/Services/MeterTariffMeterParameterService.php @@ -27,7 +27,7 @@ function ($q) { return ['count' => $count]; } - public function changeMetersTariff($meterTariffIdFrom, $meterTariffIdTo): array + public function changeMetersTariff($meterTariffIdFrom, $meterTariffIdTo) { return $this->meterParameter->newQuery()->where('tariff_id', $meterTariffIdFrom) ->get() diff --git a/Website/htdocs/mpmanager/app/Services/MeterTariffService.php b/Website/htdocs/mpmanager/app/Services/MeterTariffService.php index 40a91bfe7..17e6f1b72 100644 --- a/Website/htdocs/mpmanager/app/Services/MeterTariffService.php +++ b/Website/htdocs/mpmanager/app/Services/MeterTariffService.php @@ -3,26 +3,33 @@ namespace App\Services; use App\Models\Meter\MeterTariff; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class MeterTariffService implements IBaseService { - public function __construct(private MeterTariff $meterTariff) - { + public function __construct( + private MeterTariff $meterTariff + ) { } - public function getById($meterTariffId) + public function getById(int $meterTariffId): MeterTariff { return $this->meterTariff->newQuery() ->with(['accessRate', 'pricingComponent', 'socialTariff', 'tou']) ->findOrFail($meterTariffId); } - public function create($meterTariffData) + public function create(array $meterTariffData): MeterTariff { return $this->meterTariff->newQuery()->create($meterTariffData); } - public function update($meterTariff, $meterTariffData) + public function update($meterTariff, array $meterTariffData): MeterTariff { $meterTariff->update( $meterTariffData @@ -32,12 +39,12 @@ public function update($meterTariff, $meterTariffData) return $meterTariff; } - public function delete($meterTariff) + public function delete($meterTariff): ?bool { return $meterTariff->delete(); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->meterTariff->newQuery() diff --git a/Website/htdocs/mpmanager/app/Services/MeterTokenPaymentHistoryService.php b/Website/htdocs/mpmanager/app/Services/MeterTokenPaymentHistoryService.php index 73467dafb..ecc5873d6 100644 --- a/Website/htdocs/mpmanager/app/Services/MeterTokenPaymentHistoryService.php +++ b/Website/htdocs/mpmanager/app/Services/MeterTokenPaymentHistoryService.php @@ -4,23 +4,27 @@ use App\Models\Meter\MeterToken; use App\Models\PaymentHistory; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class MeterTokenPaymentHistoryService implements IAssignationService { - private MeterToken $meterToken; private PaymentHistory $paymentHistory; + private MeterToken $meterToken; - public function setAssigned($paymentHistory) + public function setAssigned($paymentHistory): void { $this->paymentHistory = $paymentHistory; } - public function setAssignee($meterToken) + public function setAssignee($meterToken): void { $this->meterToken = $meterToken; } - public function assign() + public function assign(): PaymentHistory { $this->paymentHistory->paidFor()->associate($this->meterToken); diff --git a/Website/htdocs/mpmanager/app/Services/MeterTypeService.php b/Website/htdocs/mpmanager/app/Services/MeterTypeService.php index 66de20e60..8fc62632b 100644 --- a/Website/htdocs/mpmanager/app/Services/MeterTypeService.php +++ b/Website/htdocs/mpmanager/app/Services/MeterTypeService.php @@ -3,24 +3,30 @@ namespace App\Services; use App\Models\Meter\MeterType; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class MeterTypeService implements IBaseService { public function __construct(private MeterType $meterType) { } - public function create($meterTypeData) + public function create(array $meterTypeData): MeterType { return $this->meterType->newQuery()->create($meterTypeData); } - public function getById($meterTypeId) + public function getById(int $meterTypeId): MeterType { return $this->meterType->newQuery()->findOrFail($meterTypeId); } - public function update($meterType, $meterTypeData) + public function update($meterType, array $meterTypeData): MeterType { $meterType->update($meterTypeData); $meterType->fresh(); @@ -28,7 +34,7 @@ public function update($meterType, $meterTypeData) return $meterType; } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->meterType->newQuery()->paginate($limit); @@ -37,8 +43,8 @@ public function getAll($limit = null) return $this->meterType->newQuery()->get(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/MiniGridGeographicalInformationService.php b/Website/htdocs/mpmanager/app/Services/MiniGridGeographicalInformationService.php index 6caa13fc1..b556001a2 100644 --- a/Website/htdocs/mpmanager/app/Services/MiniGridGeographicalInformationService.php +++ b/Website/htdocs/mpmanager/app/Services/MiniGridGeographicalInformationService.php @@ -4,23 +4,27 @@ use App\Models\GeographicalInformation; use App\Models\MiniGrid; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class MiniGridGeographicalInformationService implements IAssignationService { - private MiniGrid $miniGrid; private GeographicalInformation $geographicInformation; + private MiniGrid $miniGrid; - public function setAssigned($assigned) + public function setAssigned($assigned): void { $this->geographicInformation = $assigned; } - public function setAssignee($assignee) + public function setAssignee($assignee): void { $this->miniGrid = $assignee; } - public function assign() + public function assign(): GeographicalInformation { $this->geographicInformation->owner()->associate($this->miniGrid); diff --git a/Website/htdocs/mpmanager/app/Services/MiniGridService.php b/Website/htdocs/mpmanager/app/Services/MiniGridService.php index 066324339..4363054be 100644 --- a/Website/htdocs/mpmanager/app/Services/MiniGridService.php +++ b/Website/htdocs/mpmanager/app/Services/MiniGridService.php @@ -4,11 +4,19 @@ use App\Models\Cluster; use App\Models\MiniGrid; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class MiniGridService implements IBaseService { - public function __construct(private MiniGrid $miniGrid, private Cluster $cluster) - { + public function __construct( + private MiniGrid $miniGrid, + private Cluster $cluster + ) { } public function getByIdWithLocation($miniGridId) @@ -48,7 +56,7 @@ public function update($miniGrid, $miniGridData): MiniGrid return $miniGrid; } - public function getAll($limit = null, $dataStream = null) + public function getAll(?int $limit = null, $dataStream = null): Collection|LengthAwarePaginator { $miniGrids = $this->miniGrid->newQuery()->with(['location']); if ($dataStream) { @@ -62,8 +70,8 @@ public function getAll($limit = null, $dataStream = null) return $miniGrids->newQuery()->get(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/MpmPluginService.php b/Website/htdocs/mpmanager/app/Services/MpmPluginService.php index 71ddc6408..8f4e550b0 100644 --- a/Website/htdocs/mpmanager/app/Services/MpmPluginService.php +++ b/Website/htdocs/mpmanager/app/Services/MpmPluginService.php @@ -3,11 +3,18 @@ namespace App\Services; use App\Models\MpmPlugin; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class MpmPluginService implements IBaseService { - public function __construct(private MpmPlugin $mpmPlugin) - { + public function __construct( + private MpmPlugin $mpmPlugin + ) { } public function getById($id): MpmPlugin @@ -18,22 +25,22 @@ public function getById($id): MpmPlugin return $result; } - public function create($data) + public function create(array $data): MpmPlugin { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): MpmPlugin { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->mpmPlugin->newQuery() diff --git a/Website/htdocs/mpmanager/app/Services/OpenWeatherMap.php b/Website/htdocs/mpmanager/app/Services/OpenWeatherMap.php index 86415c54c..7fcb55ebc 100644 --- a/Website/htdocs/mpmanager/app/Services/OpenWeatherMap.php +++ b/Website/htdocs/mpmanager/app/Services/OpenWeatherMap.php @@ -3,6 +3,7 @@ namespace App\Services; use App\Exceptions\WeatherParametersMissing; +use App\Services\Interfaces\IWeatherDataProvider; use GuzzleHttp\Client; use Psr\Http\Message\ResponseInterface; diff --git a/Website/htdocs/mpmanager/app/Services/PaymentHistoryService.php b/Website/htdocs/mpmanager/app/Services/PaymentHistoryService.php index f6d4bdf59..dd493d439 100644 --- a/Website/htdocs/mpmanager/app/Services/PaymentHistoryService.php +++ b/Website/htdocs/mpmanager/app/Services/PaymentHistoryService.php @@ -4,14 +4,19 @@ use App\Models\PaymentHistory; use App\Models\Person\Person; +use App\Services\Interfaces\IAssociative; use Carbon\CarbonImmutable; use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Database\Eloquent\Builder; +/** + * @implements IAssociative + */ class PaymentHistoryService implements IAssociative { - public function __construct(private PaymentHistory $paymentHistory) - { + public function __construct( + private PaymentHistory $paymentHistory + ) { } public function findPayingCustomersInRange( @@ -41,12 +46,12 @@ function ($q) use ($serialNumber) { )->latest()->paginate($paginate); } - public function make($paymentHistoryData) + public function make(array $paymentHistoryData): PaymentHistory { return $this->paymentHistory->newQuery()->make($paymentHistoryData); } - public function save($paymentHistory) + public function save($paymentHistory): bool { return $paymentHistory->save(); } diff --git a/Website/htdocs/mpmanager/app/Services/PeriodService.php b/Website/htdocs/mpmanager/app/Services/PeriodService.php index c47a3207e..62495e2d6 100644 --- a/Website/htdocs/mpmanager/app/Services/PeriodService.php +++ b/Website/htdocs/mpmanager/app/Services/PeriodService.php @@ -1,12 +1,5 @@ + */ class PersonAddressService implements IAssignationService { private Address $address; @@ -22,17 +26,17 @@ public function getPersonAddresses($person) return $person->addresses()->with('city', 'geo')->orderBy('is_primary', 'DESC')->paginate(5); } - public function setAssigned($address) + public function setAssigned($address): void { $this->address = $address; } - public function setAssignee($person) + public function setAssignee($person): void { $this->person = $person; } - public function assign() + public function assign(): Address { $this->address->owner()->associate($this->person); diff --git a/Website/htdocs/mpmanager/app/Services/PersonPaymentHistoryService.php b/Website/htdocs/mpmanager/app/Services/PersonPaymentHistoryService.php index b658eb50e..1e0d7ad7a 100644 --- a/Website/htdocs/mpmanager/app/Services/PersonPaymentHistoryService.php +++ b/Website/htdocs/mpmanager/app/Services/PersonPaymentHistoryService.php @@ -4,23 +4,27 @@ use App\Models\PaymentHistory; use App\Models\Person\Person; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class PersonPaymentHistoryService implements IAssignationService { private PaymentHistory $paymentHistory; private Person $person; - public function setAssigned($paymentHistory) + public function setAssigned($paymentHistory): void { $this->paymentHistory = $paymentHistory; } - public function setAssignee($person) + public function setAssignee($person): void { $this->person = $person; } - public function assign() + public function assign(): PaymentHistory { $this->paymentHistory->payer()->associate($this->person); diff --git a/Website/htdocs/mpmanager/app/Services/PersonService.php b/Website/htdocs/mpmanager/app/Services/PersonService.php index 65321d08a..52155c20a 100644 --- a/Website/htdocs/mpmanager/app/Services/PersonService.php +++ b/Website/htdocs/mpmanager/app/Services/PersonService.php @@ -4,17 +4,22 @@ use App\Models\Country; use App\Models\Person\Person; +use App\Services\Interfaces\IBaseService; use Carbon\Carbon; -use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class PersonService implements IBaseService { - public function __construct(private Person $person) - { + public function __construct( + private Person $person + ) { } public function getAllRegisteredPeople(): Collection|array @@ -128,7 +133,7 @@ public function createPersonDataFromRequest(Request $request): array ]; } - public function getById($personId): Person + public function getById(int $personId): Person { /** @var Person $model */ $model = $this->person->newQuery()->find($personId); @@ -136,12 +141,12 @@ public function getById($personId): Person return $model; } - public function create($personData) + public function create(array $personData): Person { return $this->person->newQuery()->create($personData); } - public function update($person, $personData) + public function update($person, array $personData): Person { foreach ($personData as $key => $value) { $person->$key = $value; @@ -153,14 +158,12 @@ public function update($person, $personData) return $person; } - public function delete($person) + public function delete($person): ?bool { - $person->delete(); - - return $person; + return $person->delete(); } - public function getAll($limit = null, $customerType = 1) + public function getAll(?int $limit = null, $customerType = 1): LengthAwarePaginator { return $this->person->newQuery()->with([ 'addresses' => function ($q) { diff --git a/Website/htdocs/mpmanager/app/Services/PersonTicketService.php b/Website/htdocs/mpmanager/app/Services/PersonTicketService.php index 03734dff8..43c04bc27 100644 --- a/Website/htdocs/mpmanager/app/Services/PersonTicketService.php +++ b/Website/htdocs/mpmanager/app/Services/PersonTicketService.php @@ -3,24 +3,28 @@ namespace App\Services; use App\Models\Person\Person; +use App\Services\Interfaces\IAssignationService; use Inensus\Ticket\Models\Ticket; +/** + * @implements IAssignationService + */ class PersonTicketService implements IAssignationService { private Ticket $ticket; private Person $person; - public function setAssigned($ticket) + public function setAssigned($ticket): void { $this->ticket = $ticket; } - public function setAssignee($person) + public function setAssignee($person): void { $this->person = $person; } - public function assign() + public function assign(): Ticket { $this->ticket->owner()->associate($this->person); diff --git a/Website/htdocs/mpmanager/app/Services/PluginsService.php b/Website/htdocs/mpmanager/app/Services/PluginsService.php index 5c8030af5..e23af6a83 100644 --- a/Website/htdocs/mpmanager/app/Services/PluginsService.php +++ b/Website/htdocs/mpmanager/app/Services/PluginsService.php @@ -3,24 +3,31 @@ namespace App\Services; use App\Models\Plugins; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class PluginsService implements IBaseService { - public function __construct(private Plugins $plugin) - { + public function __construct( + private Plugins $plugin + ) { } - public function getById($id) + public function getById(int $id): Plugins { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function create($pluginData) + public function create(array $pluginData): Plugins { return $this->plugin->newQuery()->create($pluginData); } - public function update($model, $data) + public function update($model, array $data): Plugins { $model->update($data); $model->fresh(); @@ -28,12 +35,12 @@ public function update($model, $data) return $model; } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->plugin->newQuery()->paginate($limit); diff --git a/Website/htdocs/mpmanager/app/Services/RegistrationTailService.php b/Website/htdocs/mpmanager/app/Services/RegistrationTailService.php index d898f67cb..388c584bd 100644 --- a/Website/htdocs/mpmanager/app/Services/RegistrationTailService.php +++ b/Website/htdocs/mpmanager/app/Services/RegistrationTailService.php @@ -3,24 +3,31 @@ namespace App\Services; use App\Models\RegistrationTail; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class RegistrationTailService implements IBaseService { - public function __construct(private RegistrationTail $registrationTail) - { + public function __construct( + private RegistrationTail $registrationTail + ) { } - public function getById($id) + public function getById(int $id): RegistrationTail { return $this->registrationTail->newQuery()->find($id); } - public function create($registrationTailData) + public function create(array $registrationTailData): RegistrationTail { return $this->registrationTail->newQuery()->create($registrationTailData); } - public function update($registrationTail, $registrationTailData) + public function update($registrationTail, array $registrationTailData): RegistrationTail { if (array_key_exists('tail', $registrationTailData)) { $registrationTail->update($registrationTailData); @@ -33,12 +40,12 @@ public function update($registrationTail, $registrationTailData) return $registrationTail; } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { return $this->registrationTail->newQuery()->get(); } diff --git a/Website/htdocs/mpmanager/app/Services/RestrictionService.php b/Website/htdocs/mpmanager/app/Services/RestrictionService.php index 10d50d814..19f3b5bdc 100644 --- a/Website/htdocs/mpmanager/app/Services/RestrictionService.php +++ b/Website/htdocs/mpmanager/app/Services/RestrictionService.php @@ -3,11 +3,17 @@ namespace App\Services; use App\Models\Restriction; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class RestrictionService implements IBaseService { - public function __construct(private Restriction $restriction) - { + public function __construct( + private Restriction $restriction + ) { } public function getRestrictionForTarget($target) @@ -15,28 +21,28 @@ public function getRestrictionForTarget($target) return $this->restriction->newQuery()->where('target', $target)->firstOrFail(); } - public function getById($id) + public function getById(int $id): Restriction { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function create($data) + public function create(array $data): Restriction { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): Restriction { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/RevenueService.php b/Website/htdocs/mpmanager/app/Services/RevenueService.php index 162e4e4a3..47318dc93 100644 --- a/Website/htdocs/mpmanager/app/Services/RevenueService.php +++ b/Website/htdocs/mpmanager/app/Services/RevenueService.php @@ -1,12 +1,5 @@ + */ class SocialTariffService implements IBaseService { - public function __construct(private SocialTariff $socialTariff) - { + public function __construct( + private SocialTariff $socialTariff + ) { } - public function create($socialTariffData) + public function create(array $socialTariffData): SocialTariff { return $this->socialTariff->newQuery()->create($socialTariffData); } - public function getById($socialTariffId) + public function getById(int $socialTariffId): SocialTariff { return $this->socialTariff->newQuery()->find($socialTariffId); } - public function update($socialTariff, $socialTariffData) + public function update($socialTariff, array $socialTariffData): SocialTariff { $socialTariff->update($socialTariffData); $socialTariff->fresh(); @@ -33,13 +39,13 @@ public function deleteByTariffId($meterTariffId) $this->socialTariff->newQuery()->where('tariff_id', $meterTariffId)->delete(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/SolarService.php b/Website/htdocs/mpmanager/app/Services/SolarService.php index cae6cbdb0..f91bf0244 100644 --- a/Website/htdocs/mpmanager/app/Services/SolarService.php +++ b/Website/htdocs/mpmanager/app/Services/SolarService.php @@ -3,6 +3,7 @@ namespace App\Services; use App\Models\Solar; +use App\Services\Interfaces\ISolarService; use Carbon\Carbon; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; diff --git a/Website/htdocs/mpmanager/app/Services/SubConnectionTypeService.php b/Website/htdocs/mpmanager/app/Services/SubConnectionTypeService.php index ce8e3f70b..92f991c38 100644 --- a/Website/htdocs/mpmanager/app/Services/SubConnectionTypeService.php +++ b/Website/htdocs/mpmanager/app/Services/SubConnectionTypeService.php @@ -3,15 +3,18 @@ namespace App\Services; use App\Models\SubConnectionType; -use Illuminate\Contracts\Pagination\LengthAwarePaginator; -use Illuminate\Database\Eloquent\Builder; +use App\Services\Interfaces\IBaseService; use Illuminate\Database\Eloquent\Collection; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class SubConnectionTypeService implements IBaseService { - public function __construct(private SubConnectionType $subConnectionType) - { + public function __construct( + private SubConnectionType $subConnectionType + ) { } public function getSubConnectionTypesByConnectionTypeId($connectionTypeId, $limit = null): LengthAwarePaginator|Collection @@ -22,17 +25,17 @@ public function getSubConnectionTypesByConnectionTypeId($connectionTypeId, $limi ->get(); } - public function getById($subConnectionTypeId) + public function getById(int $subConnectionTypeId): SubConnectionType { return $this->subConnectionType->newQuery()->findOrFail($subConnectionTypeId); } - public function create($subConnectionServiceData) + public function create(array $subConnectionServiceData): SubConnectionType { return $this->subConnectionType->newQuery()->create($subConnectionServiceData); } - public function update($subConnectionType, $subConnectionTypeData): Model|Builder + public function update($subConnectionType, array $subConnectionTypeData): SubConnectionType { $subConnectionType->update($subConnectionTypeData); $subConnectionType->fresh(); @@ -40,7 +43,7 @@ public function update($subConnectionType, $subConnectionTypeData): Model|Builde return $subConnectionType; } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->subConnectionType->newQuery()->paginate($limit); @@ -49,8 +52,8 @@ public function getAll($limit = null) return $this->subConnectionType->newQuery()->get(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/SubTargetService.php b/Website/htdocs/mpmanager/app/Services/SubTargetService.php index bcdf23afe..7c0fac408 100644 --- a/Website/htdocs/mpmanager/app/Services/SubTargetService.php +++ b/Website/htdocs/mpmanager/app/Services/SubTargetService.php @@ -3,19 +3,27 @@ namespace App\Services; use App\Models\SubTarget; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class SubTargetService implements IBaseService { - public function __construct(private SubTarget $subTarget) - { + public function __construct( + private SubTarget $subTarget + ) { } - public function getById($id) + public function getById(int $id): SubTarget { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); + + return new SubTarget(); } - public function create($subTargetData) + public function create(array $subTargetData): SubTarget { $targetId = $subTargetData['targetId']; @@ -30,20 +38,24 @@ public function create($subTargetData) 'average_revenue_per_month' => $data['target']['averageRevenuePerMonth'], ]); } + + return $this->subTarget; } - public function update($model, $data) + public function update($model, array $data): SubTarget { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); + + return new SubTarget(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/TargetService.php b/Website/htdocs/mpmanager/app/Services/TargetService.php index afffb83d5..5a8d4193d 100644 --- a/Website/htdocs/mpmanager/app/Services/TargetService.php +++ b/Website/htdocs/mpmanager/app/Services/TargetService.php @@ -40,7 +40,7 @@ public function create(CarbonImmutable $period, string $targetForType, TargetAss return $target; } - public function getAll($limit = null): Collection|LengthAwarePaginator + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->target->newQuery()->with(['owner', 'subTargets.connectionType'])->orderBy( diff --git a/Website/htdocs/mpmanager/app/Services/TariffPricingComponentService.php b/Website/htdocs/mpmanager/app/Services/TariffPricingComponentService.php index 1432d66ac..0f8cea309 100644 --- a/Website/htdocs/mpmanager/app/Services/TariffPricingComponentService.php +++ b/Website/htdocs/mpmanager/app/Services/TariffPricingComponentService.php @@ -3,11 +3,17 @@ namespace App\Services; use App\Models\TariffPricingComponent; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class TariffPricingComponentService implements IBaseService { - public function __construct(private TariffPricingComponent $tariffPricingComponent) - { + public function __construct( + private TariffPricingComponent $tariffPricingComponent + ) { } public function make($tariffPricingComponentData) @@ -25,28 +31,28 @@ public function deleteByTariffId($meterTariffId) }); } - public function getById($id) + public function getById(int $id): TariffPricingComponent { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function create($data) + public function create(array $data): TariffPricingComponent { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): TariffPricingComponent { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/TicketSettingsService.php b/Website/htdocs/mpmanager/app/Services/TicketSettingsService.php index 6b479234b..b6e7889e6 100644 --- a/Website/htdocs/mpmanager/app/Services/TicketSettingsService.php +++ b/Website/htdocs/mpmanager/app/Services/TicketSettingsService.php @@ -3,14 +3,19 @@ namespace App\Services; use App\Models\TicketSettings; +use App\Services\Interfaces\ISettingsService; +/** + * @implements ISettingsService + */ class TicketSettingsService implements ISettingsService { - public function __construct(private TicketSettings $ticketSettings) - { + public function __construct( + private TicketSettings $ticketSettings + ) { } - public function update($ticketSettings, $ticketSettingsData) + public function update($ticketSettings, array $ticketSettingsData): TicketSettings { $ticketSettings->update($ticketSettingsData); $ticketSettings->fresh(); @@ -18,7 +23,7 @@ public function update($ticketSettings, $ticketSettingsData) return $ticketSettings; } - public function get() + public function get(): TicketSettings { return $this->ticketSettings->newQuery()->first(); } diff --git a/Website/htdocs/mpmanager/app/Services/TimeOfUsageService.php b/Website/htdocs/mpmanager/app/Services/TimeOfUsageService.php index 53c770d3c..93edf5ec5 100644 --- a/Website/htdocs/mpmanager/app/Services/TimeOfUsageService.php +++ b/Website/htdocs/mpmanager/app/Services/TimeOfUsageService.php @@ -3,24 +3,30 @@ namespace App\Services; use App\Models\TimeOfUsage; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +/** + * @implements IBaseService + */ class TimeOfUsageService implements IBaseService { - public function __construct(private TimeOfUsage $timeOfUsage) - { + public function __construct( + private TimeOfUsage $timeOfUsage + ) { } - public function create($timeOfUsageData) + public function create(array $timeOfUsageData): TimeOfUsage { return $this->timeOfUsage->newQuery()->create($timeOfUsageData); } - public function getById($timeOfUsageId) + public function getById(int $timeOfUsageId): TimeOfUsage { return $this->timeOfUsage->newQuery()->find($timeOfUsageId); } - public function update($timeOfUsage, $timeOfUsageData) + public function update($timeOfUsage, array $timeOfUsageData): TimeOfUsage { $timeOfUsage->update($timeOfUsageData); $timeOfUsage->fresh(); @@ -28,13 +34,13 @@ public function update($timeOfUsage, $timeOfUsageData) return $timeOfUsage; } - public function delete($timeOfUsage) + public function delete($timeOfUsage): ?bool { return $timeOfUsage->delete(); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/TokenService.php b/Website/htdocs/mpmanager/app/Services/TokenService.php index 69d7d25ae..b1c0c9cfd 100644 --- a/Website/htdocs/mpmanager/app/Services/TokenService.php +++ b/Website/htdocs/mpmanager/app/Services/TokenService.php @@ -3,34 +3,43 @@ namespace App\Services; use App\Models\Token; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class TokenService implements IBaseService { - public function __construct(private Token $token) - { + public function __construct( + private Token $token + ) { } - public function getById($id) + public function getById(int $id): Token { return $this->token->newQuery()->find($id); } - public function create($data) + public function create(array $data): Token { return $this->token->newQuery()->create($data); } - public function update($model, $data) + public function update($model, array $data): Token { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); + + return new Token(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->token->newQuery()->paginate($limit); diff --git a/Website/htdocs/mpmanager/app/Services/TransactionPaymentHistoryService.php b/Website/htdocs/mpmanager/app/Services/TransactionPaymentHistoryService.php index 23b98077b..6d05d2107 100644 --- a/Website/htdocs/mpmanager/app/Services/TransactionPaymentHistoryService.php +++ b/Website/htdocs/mpmanager/app/Services/TransactionPaymentHistoryService.php @@ -4,23 +4,27 @@ use App\Models\PaymentHistory; use App\Models\Transaction\Transaction; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class TransactionPaymentHistoryService implements IAssignationService { - private Transaction $transaction; private PaymentHistory $paymentHistory; + private Transaction $transaction; - public function setAssigned($paymentHistory) + public function setAssigned($paymentHistory): void { $this->paymentHistory = $paymentHistory; } - public function setAssignee($transaction) + public function setAssignee($transaction): void { $this->transaction = $transaction; } - public function assign() + public function assign(): PaymentHistory { $this->paymentHistory->transaction()->associate($this->transaction); diff --git a/Website/htdocs/mpmanager/app/Services/UsageTypeService.php b/Website/htdocs/mpmanager/app/Services/UsageTypeService.php index 1243a9976..755343ec1 100644 --- a/Website/htdocs/mpmanager/app/Services/UsageTypeService.php +++ b/Website/htdocs/mpmanager/app/Services/UsageTypeService.php @@ -3,35 +3,48 @@ namespace App\Services; use App\Models\UsageType; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class UsageTypeService implements IBaseService { - public function __construct(private UsageType $usageType) - { + public function __construct( + private UsageType $usageType + ) { } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { return $this->usageType->newQuery()->get(); } - public function getById($id) + public function getById(int $id): UsageType { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); + + return new UsageType(); } - public function create($data) + public function create(array $data): UsageType { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); + + return new UsageType(); } - public function update($model, $data) + public function update($model, array $data): UsageType { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); + + return new UsageType(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/Services/UserAppliancePersonService.php b/Website/htdocs/mpmanager/app/Services/UserAppliancePersonService.php index 377388dfe..8f2d1d891 100644 --- a/Website/htdocs/mpmanager/app/Services/UserAppliancePersonService.php +++ b/Website/htdocs/mpmanager/app/Services/UserAppliancePersonService.php @@ -4,23 +4,27 @@ use App\Models\AssetPerson; use App\Models\User; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class UserAppliancePersonService implements IAssignationService { - private User $user; private AssetPerson $appliancePerson; + private User $user; - public function setAssigned($appliancePerson) + public function setAssigned($appliancePerson): void { $this->appliancePerson = $appliancePerson; } - public function setAssignee($user) + public function setAssignee($user): void { $this->user = $user; } - public function assign() + public function assign(): AssetPerson { $this->appliancePerson->creator()->associate($this->user); diff --git a/Website/htdocs/mpmanager/app/Services/UserService.php b/Website/htdocs/mpmanager/app/Services/UserService.php index c4be6dfc2..8d0f6ef96 100644 --- a/Website/htdocs/mpmanager/app/Services/UserService.php +++ b/Website/htdocs/mpmanager/app/Services/UserService.php @@ -129,14 +129,14 @@ public function getById($id) return $this->user->newQuery()->find($id); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } public function getUsers(): Collection diff --git a/Website/htdocs/mpmanager/app/Services/UserTicketService.php b/Website/htdocs/mpmanager/app/Services/UserTicketService.php index 76a8e933e..9e4240034 100644 --- a/Website/htdocs/mpmanager/app/Services/UserTicketService.php +++ b/Website/htdocs/mpmanager/app/Services/UserTicketService.php @@ -3,24 +3,28 @@ namespace App\Services; use App\Models\User; +use App\Services\Interfaces\IAssignationService; use Inensus\Ticket\Models\Ticket; +/** + * @implements IAssignationService + */ class UserTicketService implements IAssignationService { - private User $user; private Ticket $ticket; + private User $user; - public function setAssigned($ticket) + public function setAssigned($ticket): void { $this->ticket = $ticket; } - public function setAssignee($user) + public function setAssignee($user): void { $this->user = $user; } - public function assign() + public function assign(): Ticket { $this->ticket->creator()->associate($this->user); diff --git a/Website/htdocs/mpmanager/app/Sms/AndroidGateway.php b/Website/htdocs/mpmanager/app/Sms/AndroidGateway.php index 89ec622e0..4067480dc 100644 --- a/Website/htdocs/mpmanager/app/Sms/AndroidGateway.php +++ b/Website/htdocs/mpmanager/app/Sms/AndroidGateway.php @@ -1,12 +1,5 @@ + */ class DeviceAddressService implements IAssignationService { - private Device $device; private Address $address; + private Device $device; public function setAssigned($assigned): void { @@ -30,7 +33,6 @@ public function assign(): Address public function getAddressByDevice(Device $device): ?Address { - /** @var Address|null $result */ $result = Address::query()->with('geo') ->where('owner_id', $device->id) ->where('owner_type', 'device') diff --git a/Website/htdocs/mpmanager/app/modules/Device/DeviceService.php b/Website/htdocs/mpmanager/app/modules/Device/DeviceService.php index b3266fe24..d1e9a887c 100644 --- a/Website/htdocs/mpmanager/app/modules/Device/DeviceService.php +++ b/Website/htdocs/mpmanager/app/modules/Device/DeviceService.php @@ -3,11 +3,15 @@ namespace MPM\Device; use App\Models\Device; -use App\Services\IAssociative; -use App\Services\IBaseService; +use App\Services\Interfaces\IAssociative; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Support\Collection; +/** + * @implements IBaseService + * @implements IAssociative + */ class DeviceService implements IBaseService, IAssociative { public function __construct( @@ -17,7 +21,6 @@ public function __construct( public function make($deviceData): Device { - /** @var Device $result */ $result = $this->device->newQuery()->create([ 'person_id' => $deviceData['person_id'], 'device_serial' => $deviceData['device_serial'], @@ -28,7 +31,6 @@ public function make($deviceData): Device public function getBySerialNumber($serialNumber): ?Device { - /** @var Device|null $result */ $result = $this->device->newQuery() ->with(['address.geo', 'device.manufacturer', 'person']) ->where('device_serial', $serialNumber) @@ -37,22 +39,26 @@ public function getBySerialNumber($serialNumber): ?Device return $result; } - public function save($device) + public function save($device): bool { return $device->save(); } - public function getById($id) + public function getById(int $id): Device { - throw new \Exception('Not implemented'); + throw new \Exception('Method getById() not yet implemented.'); + + return new Device(); } - public function create($data) + public function create(array $data): Device { - throw new \Exception('Not implemented'); + throw new \Exception('Method create() not yet implemented.'); + + return new Device(); } - public function update($device, $deviceData) + public function update($device, array $deviceData): Device { $device->update($deviceData); $device->fresh(); @@ -60,12 +66,12 @@ public function update($device, $deviceData) return $device; } - public function delete($model) + public function delete($model): ?bool { - throw new \Exception('Not implemented'); + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null): Collection|LengthAwarePaginator + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->device->newQuery()->with(['person', 'device'])->paginate($limit); diff --git a/Website/htdocs/mpmanager/app/modules/EBike/EBikeDeviceService.php b/Website/htdocs/mpmanager/app/modules/EBike/EBikeDeviceService.php index d72138824..3aed09e05 100644 --- a/Website/htdocs/mpmanager/app/modules/EBike/EBikeDeviceService.php +++ b/Website/htdocs/mpmanager/app/modules/EBike/EBikeDeviceService.php @@ -4,24 +4,27 @@ use App\Models\Device; use App\Models\EBike; -use App\Services\IAssignationService; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class EBikeDeviceService implements IAssignationService { private Device $device; protected EBike $eBike; - public function setAssigned($assigned) + public function setAssigned($assigned): void { $this->device = $assigned; } - public function setAssignee($assignee) + public function setAssignee($assignee): void { $this->eBike = $assignee; } - public function assign() + public function assign(): Device { $this->device->device()->associate($this->eBike); diff --git a/Website/htdocs/mpmanager/app/modules/EBike/EBikeService.php b/Website/htdocs/mpmanager/app/modules/EBike/EBikeService.php index 4c936bf69..13c349973 100644 --- a/Website/htdocs/mpmanager/app/modules/EBike/EBikeService.php +++ b/Website/htdocs/mpmanager/app/modules/EBike/EBikeService.php @@ -3,16 +3,21 @@ namespace MPM\EBike; use App\Models\EBike; -use App\Services\IBaseService; -use Illuminate\Contracts\Pagination\LengthAwarePaginator; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class EBikeService implements IBaseService { - public function __construct(private EBike $eBike) - { + public function __construct( + private EBike $eBike + ) { } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->eBike->newQuery()->with(['manufacturer', 'appliance', 'device.person'])->paginate($limit); @@ -21,12 +26,12 @@ public function getAll($limit = null) return $this->eBike->newQuery()->with(['manufacturer', 'appliance', 'device.person'])->get(); } - public function getById($id) + public function getById(int $id): EBike { return $this->eBike->newQuery()->with(['manufacturer', 'appliance', 'device.person'])->find($id); } - public function create($data) + public function create(array $data): EBike { return $this->eBike->newQuery()->create($data); } @@ -50,9 +55,12 @@ public function search($term, $paginate): LengthAwarePaginator )->paginate($paginate); } - public function update($model, $data) + public function update($model, array $data): EBike { - return $model->newQuery()->update($data); + $model->newQuery()->update($data); + $model->fresh(); + + return $model; } public function getBySerialNumber($serialNumber) @@ -64,8 +72,8 @@ public function getBySerialNumber($serialNumber) )->first(); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/app/modules/Meter/MeterDeviceService.php b/Website/htdocs/mpmanager/app/modules/Meter/MeterDeviceService.php index 2f7204572..c9c9f1049 100644 --- a/Website/htdocs/mpmanager/app/modules/Meter/MeterDeviceService.php +++ b/Website/htdocs/mpmanager/app/modules/Meter/MeterDeviceService.php @@ -4,8 +4,11 @@ use App\Models\Device; use App\Models\Meter\Meter; -use App\Services\IAssignationService; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class MeterDeviceService implements IAssignationService { private Device $device; diff --git a/Website/htdocs/mpmanager/app/modules/SolarHomeSystem/SolarHomeSystemDeviceService.php b/Website/htdocs/mpmanager/app/modules/SolarHomeSystem/SolarHomeSystemDeviceService.php index 901cb48ba..a87031a57 100644 --- a/Website/htdocs/mpmanager/app/modules/SolarHomeSystem/SolarHomeSystemDeviceService.php +++ b/Website/htdocs/mpmanager/app/modules/SolarHomeSystem/SolarHomeSystemDeviceService.php @@ -4,24 +4,27 @@ use App\Models\Device; use App\Models\SolarHomeSystem; -use App\Services\IAssignationService; +use App\Services\Interfaces\IAssignationService; +/** + * @implements IAssignationService + */ class SolarHomeSystemDeviceService implements IAssignationService { private Device $device; protected SolarHomeSystem $shs; - public function setAssigned($assigned) + public function setAssigned($assigned): void { $this->device = $assigned; } - public function setAssignee($assignee) + public function setAssignee($assignee): void { $this->shs = $assignee; } - public function assign() + public function assign(): Device { $this->device->device()->associate($this->shs); diff --git a/Website/htdocs/mpmanager/app/modules/SolarHomeSystem/SolarHomeSystemService.php b/Website/htdocs/mpmanager/app/modules/SolarHomeSystem/SolarHomeSystemService.php index dfcd6f7de..b9b9c8c9a 100644 --- a/Website/htdocs/mpmanager/app/modules/SolarHomeSystem/SolarHomeSystemService.php +++ b/Website/htdocs/mpmanager/app/modules/SolarHomeSystem/SolarHomeSystemService.php @@ -3,17 +3,20 @@ namespace MPM\SolarHomeSystem; use App\Models\SolarHomeSystem; -use App\Services\IBaseService; -use Illuminate\Contracts\Pagination\LengthAwarePaginator; -use Illuminate\Support\Collection; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +/** + * @implements IBaseService + */ class SolarHomeSystemService implements IBaseService { public function __construct(private SolarHomeSystem $solarHomeSystem) { } - public function getAll($limit = null): LengthAwarePaginator|Collection + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->solarHomeSystem->newQuery()->with(['manufacturer', 'appliance', 'device.person'])->paginate($limit); @@ -22,7 +25,7 @@ public function getAll($limit = null): LengthAwarePaginator|Collection return $this->solarHomeSystem->newQuery()->with(['manufacturer', 'appliance', 'device.person'])->get(); } - public function getById($id): SolarHomeSystem + public function getById(int $id): SolarHomeSystem { /** @var SolarHomeSystem|null $result */ $result = $this->solarHomeSystem->newQuery() @@ -32,7 +35,7 @@ public function getById($id): SolarHomeSystem return $result; } - public function create($data): SolarHomeSystem + public function create(array $data): SolarHomeSystem { /** @var SolarHomeSystem $result */ $result = $this->solarHomeSystem->newQuery()->create($data); @@ -59,12 +62,12 @@ public function search($term, $paginate): LengthAwarePaginator )->paginate($paginate); } - public function update($model, $data) + public function update($model, array $data): SolarHomeSystem { throw new \Exception('not implemented'); } - public function delete($model) + public function delete($model): ?bool { throw new \Exception('not implemented'); } diff --git a/Website/htdocs/mpmanager/app/modules/Transaction/TransactionService.php b/Website/htdocs/mpmanager/app/modules/Transaction/TransactionService.php index 62058ac08..9bfc8ca1f 100644 --- a/Website/htdocs/mpmanager/app/modules/Transaction/TransactionService.php +++ b/Website/htdocs/mpmanager/app/modules/Transaction/TransactionService.php @@ -6,11 +6,15 @@ use App\Models\EBike; use App\Models\SolarHomeSystem; use App\Models\Transaction\Transaction; -use App\Services\IAssociative; -use App\Services\IBaseService; +use App\Services\Interfaces\IAssociative; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Pagination\LengthAwarePaginator; -use Illuminate\Support\Collection; +/** + * @implements IAssociative + * @implements IBaseService + */ class TransactionService implements IAssociative, IBaseService { public const YESTERDAY = 0; @@ -243,17 +247,17 @@ public function comparePeriods(array $currentTransactions, array $pastTransactio ]; } - public function make($transactionData) + public function make(array $transactionData): Transaction { return $this->transaction->newQuery()->make($transactionData); } - public function save($transaction) + public function save($transaction): bool { - $transaction->save(); + return $transaction->save(); } - public function getById($id) + public function getById(int $id): Transaction { return $this->transaction->newQuery()->with([ 'token', @@ -264,7 +268,7 @@ public function getById($id) 'device' => fn ($q) => $q->whereHas('person')->with(['device', 'person'])])->find($id); } - public function getAll($limit = null): Collection|LengthAwarePaginator + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->transaction->newQuery()->with(['originalTransaction'])->latest()->paginate($limit); @@ -273,18 +277,18 @@ public function getAll($limit = null): Collection|LengthAwarePaginator return $this->transaction->newQuery()->latest()->get(); } - public function create($data) + public function create(array $data): Transaction { - // TODO: Implement create() method. + throw new \Exception('Method create() not yet implemented.'); } - public function update($model, $data) + public function update($model, array $data): Transaction { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/composer.json b/Website/htdocs/mpmanager/composer.json index 8d88a97ef..0f7f22aa9 100644 --- a/Website/htdocs/mpmanager/composer.json +++ b/Website/htdocs/mpmanager/composer.json @@ -12,7 +12,6 @@ "barryvdh/laravel-dompdf": "^v2.0.0", "bogdaan/viber-bot-php": "^0.0.15", "doctrine/dbal": "^3.1", - "enlightn/enlightn": "^1.22", "fideloper/proxy": "^4.0", "guzzlehttp/guzzle": "^7.3.0", "laravel/framework": "^9", @@ -36,6 +35,7 @@ "filp/whoops": "^2.0", "friendsofphp/php-cs-fixer": "^3.58", "fzaninotto/faker": "^1.9.1", + "larastan/larastan": "^2.0", "mockery/mockery": "^1.0", "nunomaduro/collision": "^6.1", "phpstan/phpstan": "^1.1", @@ -102,7 +102,7 @@ "lint": "find . -name \\*.php -not -path './lib/composer/*' -not -path './vendor/*' -not -path './build/.phan/*' -exec php -l \"{}\" \\;", "php-cs-fixer-fix": "php-cs-fixer fix --diff", "php-cs-fixer-check": "php-cs-fixer check --diff", - "analyze": "phpstan analyse --memory-limit=2G --no-progress --level=max --configuration=phpstan.neon --autoload-file=vendor/autoload.php --error-format=table app/ packages/ tests/", + "phpstan-analyse": "phpstan analyse --memory-limit=2G --no-progress", "psalm-check": "psalm app/" } } diff --git a/Website/htdocs/mpmanager/composer.lock b/Website/htdocs/mpmanager/composer.lock index 658f026a0..5a2e9c57b 100644 --- a/Website/htdocs/mpmanager/composer.lock +++ b/Website/htdocs/mpmanager/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8ac7d2f1561c24f75d8a64be9ee5e199", + "content-hash": "1c46cf33cb9d9ff0f11bde3f31e230d4", "packages": [ { "name": "barryvdh/laravel-dompdf", @@ -189,39 +189,38 @@ "time": "2023-01-15T23:15:59+00:00" }, { - "name": "composer/ca-bundle", - "version": "1.3.7", + "name": "dflydev/dot-access-data", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "76e46335014860eec1aa5a724799a00a2e47cc85" + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/76e46335014860eec1aa5a724799a00a2e47cc85", - "reference": "76e46335014860eec1aa5a724799a00a2e47cc85", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", "shasum": "" }, "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { "psr-4": { - "Composer\\CaBundle\\": "src" + "Dflydev\\DotAccessData\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -230,76 +229,72 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.3.7" - }, - "funding": [ + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, { - "url": "https://packagist.com", - "type": "custom" + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" }, { - "url": "https://github.com/composer", - "type": "github" + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" } ], - "time": "2023-08-30T09:31:38+00:00" + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" }, { - "name": "composer/class-map-generator", - "version": "1.1.0", + "name": "doctrine/cache", + "version": "2.2.0", "source": { "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9" + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", "shasum": "" }, "require": { - "composer/pcre": "^2.1 || ^3.1", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\ClassMapGenerator\\": "src" + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" } }, "notification-url": "https://packagist.org/downloads/", @@ -308,102 +303,106 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Utilities to scan PHP code and generate class maps.", + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", "keywords": [ - "classmap" + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" ], "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.1.0" + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { - "url": "https://github.com/composer", - "type": "github" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", "type": "tidelift" } ], - "time": "2023-06-30T13:58:57+00:00" + "time": "2022-05-20T20:07:39+00:00" }, { - "name": "composer/composer", - "version": "2.6.5", + "name": "doctrine/dbal", + "version": "3.7.2", "source": { "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "4b0fe89db9e65b1e64df633a992e70a7a215ab33" + "url": "https://github.com/doctrine/dbal.git", + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/4b0fe89db9e65b1e64df633a992e70a7a215ab33", - "reference": "4b0fe89db9e65b1e64df633a992e70a7a215ab33", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", "shasum": "" }, "require": { - "composer/ca-bundle": "^1.0", - "composer/class-map-generator": "^1.0", - "composer/metadata-minifier": "^1.0", - "composer/pcre": "^2.1 || ^3.1", - "composer/semver": "^3.2.5", - "composer/spdx-licenses": "^1.5.7", - "composer/xdebug-handler": "^2.0.2 || ^3.0.3", - "justinrainbow/json-schema": "^5.2.11", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "react/promise": "^2.8 || ^3", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.2", - "seld/signal-handler": "^2.0", - "symfony/console": "^5.4.11 || ^6.0.11 || ^7", - "symfony/filesystem": "^5.4 || ^6.0 || ^7", - "symfony/finder": "^5.4 || ^6.0 || ^7", - "symfony/polyfill-php73": "^1.24", - "symfony/polyfill-php80": "^1.24", - "symfony/polyfill-php81": "^1.24", - "symfony/process": "^5.4 || ^6.0 || ^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.9.3", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1", - "phpstan/phpstan-symfony": "^1.2.10", - "symfony/phpunit-bridge": "^6.0 || ^7" + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.42", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "9.6.13", + "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.7.2", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.30.0" }, "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" + "symfony/console": "For helpful console commands such as SQL execution and import of files." }, "bin": [ - "bin/composer" + "bin/doctrine-dbal" ], "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.6-dev" - }, - "phpstan": { - "includes": [ - "phpstan/rules.neon" - ] - } - }, "autoload": { "psr-4": { - "Composer\\": "src/Composer/" + "Doctrine\\DBAL\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -412,145 +411,141 @@ ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "https://www.naderman.de" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" }, { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" } ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", "keywords": [ - "autoload", - "dependency", - "package" + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" ], "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/composer/issues", - "security": "https://github.com/composer/composer/security/policy", - "source": "https://github.com/composer/composer/tree/2.6.5" + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.7.2" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { - "url": "https://github.com/composer", - "type": "github" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", "type": "tidelift" } ], - "time": "2023-10-06T08:11:52+00:00" + "time": "2023-11-19T08:06:58+00:00" }, { - "name": "composer/metadata-minifier", - "version": "1.0.0", + "name": "doctrine/deprecations", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/composer/metadata-minifier.git", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "composer/composer": "^2", - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, + "type": "library", "autoload": { "psr-4": { - "Composer\\MetadataMinifier\\": "src" + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Small utility library that handles metadata minification and expansion.", - "keywords": [ - "composer", - "compression" - ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", "support": { - "issues": "https://github.com/composer/metadata-minifier/issues", - "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.2" }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-04-07T13:37:33+00:00" + "time": "2023-09-27T20:04:15+00:00" }, { - "name": "composer/pcre", - "version": "3.1.1", + "name": "doctrine/event-manager", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" + "url": "https://github.com/doctrine/event-manager.git", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\Pcre\\": "src" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -559,68 +554,88 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" + "event", + "event dispatcher", + "event manager", + "event system", + "events" ], "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.1" + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { - "url": "https://github.com/composer", - "type": "github" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", "type": "tidelift" } ], - "time": "2023-10-11T07:11:09+00:00" + "time": "2022-10-12T20:59:15+00:00" }, { - "name": "composer/semver", - "version": "3.4.0", + "name": "doctrine/inflector", + "version": "2.0.8", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "url": "https://github.com/doctrine/inflector.git", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\Semver\\": "src" + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -629,79 +644,88 @@ ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" }, { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Roman Borschel", + "email": "roman@code-factory.org" }, { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "keywords": [ - "semantic", - "semver", - "validation", - "versioning" + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" ], "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.8" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { - "url": "https://github.com/composer", - "type": "github" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2023-06-16T13:40:37+00:00" }, { - "name": "composer/spdx-licenses", - "version": "1.5.8", + "name": "doctrine/lexer", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a" + "url": "https://github.com/doctrine/lexer.git", + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a", - "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^8.1" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\Spdx\\": "src" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -710,722 +734,68 @@ ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" }, { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Roman Borschel", + "email": "roman@code-factory.org" }, { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "SPDX licenses list and validation library.", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ - "license", - "spdx", - "validator" + "annotations", + "docblock", + "lexer", + "parser", + "php" ], "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.8" + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.0" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { - "url": "https://github.com/composer", - "type": "github" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", "type": "tidelift" } ], - "time": "2023-11-20T07:44:33+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { - "name": "composer/xdebug-handler", - "version": "3.0.3", + "name": "dompdf/dompdf", + "version": "v2.0.3", "source": { "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "url": "https://github.com/dompdf/dompdf.git", + "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/e8d2d5e37e8b0b30f0732a011295ab80680d7e85", + "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85", "shasum": "" }, "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "dflydev/dot-access-data", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" - }, - "time": "2022-10-27T11:44:00+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, - { - "name": "doctrine/dbal", - "version": "3.7.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", - "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "12.0.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.42", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.13", - "psalm/plugin-phpunit": "0.18.4", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4|^6.0", - "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.30.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.2" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2023-11-19T08:06:58+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.2" - }, - "time": "2023-09-27T20:04:15+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.28" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2022-10-12T20:59:15+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.0.8", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^11.0", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25 || ^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.8" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2023-06-16T13:40:37+00:00" - }, - { - "name": "doctrine/lexer", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-12-15T16:57:16+00:00" - }, - { - "name": "dompdf/dompdf", - "version": "v2.0.3", - "source": { - "type": "git", - "url": "https://github.com/dompdf/dompdf.git", - "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/e8d2d5e37e8b0b30f0732a011295ab80680d7e85", - "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "masterminds/html5": "^2.0", - "phenx/php-font-lib": ">=0.5.4 <1.0.0", - "phenx/php-svg-lib": ">=0.3.3 <1.0.0", - "php": "^7.1 || ^8.0" + "ext-dom": "*", + "ext-mbstring": "*", + "masterminds/html5": "^2.0", + "phenx/php-font-lib": ">=0.5.4 <1.0.0", + "phenx/php-svg-lib": ">=0.3.3 <1.0.0", + "php": "^7.1 || ^8.0" }, "require-dev": { "ext-json": "*", @@ -1595,159 +965,6 @@ ], "time": "2023-10-06T06:47:41+00:00" }, - { - "name": "enlightn/enlightn", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/enlightn/enlightn.git", - "reference": "1937be5e6bd3142dfd03de90927ddd571f16477c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/enlightn/enlightn/zipball/1937be5e6bd3142dfd03de90927ddd571f16477c", - "reference": "1937be5e6bd3142dfd03de90927ddd571f16477c", - "shasum": "" - }, - "require": { - "enlightn/security-checker": "^1.1", - "ext-json": "*", - "guzzlehttp/guzzle": "^5.0|^6.0|^7.0", - "laravel/framework": "^6.0|^7.0|^8.0|^9.0", - "nikic/php-parser": "^4.0", - "nunomaduro/larastan": "^0.6.11|^0.7|^1.0.0", - "php": "^7.2|^8.0", - "phpstan/phpstan": "^0.12.59|>=1.0.0 <1.2.0", - "symfony/finder": "^4.0|^5.0|^6.0" - }, - "require-dev": { - "barryvdh/laravel-ide-helper": "^2.8", - "brianium/paratest": "^6.1", - "fideloper/proxy": "^4.4", - "friendsofphp/php-cs-fixer": "^2.18|^3.0", - "mockery/mockery": "^1.3", - "orchestra/testbench": "^4.0|^5.20|^6.15|^7.0", - "phpunit/phpunit": "^7.5|^8.0|^9.0", - "predis/predis": "*" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Enlightn\\Enlightn\\EnlightnServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Enlightn\\Enlightn\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Paras Malhotra", - "email": "paras@laravel-enlightn.com" - }, - { - "name": "Miguel Piedrafita", - "email": "soy@miguelpiedrafita.com" - }, - { - "name": "Lars Klopstra", - "email": "lars@flowframe.nl" - } - ], - "description": "Enlightn - Your performance & security consultant, an artisan command away.", - "homepage": "https://www.laravel-enlightn.com/", - "keywords": [ - "Audit", - "analysis tool", - "dynamic analysis", - "dynamic analyzer", - "laravel", - "package", - "performance", - "security", - "static analysis", - "static analyzer" - ], - "support": { - "docs": "https://www.laravel-enlightn.com/docs/", - "issues": "https://github.com/enlightn/enlightn/issues", - "source": "https://github.com/enlightn/enlightn/tree/v1.26.0" - }, - "time": "2022-06-11T10:46:25+00:00" - }, - { - "name": "enlightn/security-checker", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/enlightn/security-checker.git", - "reference": "68df5c7256c84b428bf8fcff0d249de06ce362d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/enlightn/security-checker/zipball/68df5c7256c84b428bf8fcff0d249de06ce362d2", - "reference": "68df5c7256c84b428bf8fcff0d249de06ce362d2", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/guzzle": "^6.3|^7.0", - "php": ">=5.6", - "symfony/console": "^3.4|^4|^5|^6|^7", - "symfony/finder": "^3|^4|^5|^6|^7", - "symfony/process": "^3.4|^4|^5|^6|^7", - "symfony/yaml": "^3.4|^4|^5|^6|^7" - }, - "require-dev": { - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^2.18|^3.0", - "phpunit/phpunit": "^5.5|^6|^7|^8|^9" - }, - "bin": [ - "security-checker" - ], - "type": "library", - "autoload": { - "psr-4": { - "Enlightn\\SecurityChecker\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paras Malhotra", - "email": "paras@laravel-enlightn.com" - }, - { - "name": "Miguel Piedrafita", - "email": "soy@miguelpiedrafita.com" - } - ], - "description": "A PHP dependency vulnerabilities scanner based on the Security Advisories Database.", - "keywords": [ - "package", - "php", - "scanner", - "security", - "security advisories", - "vulnerability scanner" - ], - "support": { - "issues": "https://github.com/enlightn/security-checker/issues", - "source": "https://github.com/enlightn/security-checker/tree/v1.11.0" - }, - "time": "2023-11-17T07:53:29+00:00" - }, { "name": "ezyang/htmlpurifier", "version": "v4.17.0", @@ -2372,159 +1589,38 @@ { "name": "George Mponos", "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - } - ], - "description": "A polyfill class for uri_template of PHP", - "keywords": [ - "guzzlehttp", - "uri-template" - ], - "support": { - "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", - "type": "tidelift" - } - ], - "time": "2023-08-27T10:19:19+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "v5.2.13", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/fbbe7e5d79f618997bc3332a6f49246036c45793", - "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "homepage": "https://github.com/gmponos" }, { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" } ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", + "description": "A polyfill class for uri_template of PHP", "keywords": [ - "json", - "schema" + "guzzlehttp", + "uri-template" ], "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/v5.2.13" + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.2" }, - "time": "2023-09-26T02:20:38+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2023-08-27T10:19:19+00:00" }, { "name": "laravel/framework", @@ -3835,91 +2931,6 @@ }, "time": "2023-05-10T11:58:31+00:00" }, - { - "name": "mockery/mockery", - "version": "1.6.6", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "psalm/plugin-phpunit": "^0.18.4", - "symplify/easy-coding-standard": "^11.5.0", - "vimeo/psalm": "^4.30" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" - }, - "time": "2023-08-09T00:03:52+00:00" - }, { "name": "monolog/monolog", "version": "2.9.2", @@ -4399,104 +3410,6 @@ }, "time": "2023-08-13T19:53:39+00:00" }, - { - "name": "nunomaduro/larastan", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/larastan.git", - "reference": "769bc6346a6cce3b823c30eaace33d9c3a0dd40e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/769bc6346a6cce3b823c30eaace33d9c3a0dd40e", - "reference": "769bc6346a6cce3b823c30eaace33d9c3a0dd40e", - "shasum": "" - }, - "require": { - "composer/composer": "^1.0 || ^2.0", - "ext-json": "*", - "illuminate/console": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/container": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/contracts": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/database": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/http": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/pipeline": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "mockery/mockery": "^0.9 || ^1.0", - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.0 <1.9", - "symfony/process": "^4.3 || ^5.0 || ^6.0" - }, - "require-dev": { - "nikic/php-parser": "^4.13.0", - "orchestra/testbench": "^4.0 || ^5.0 || ^6.0 || ^7.0", - "phpunit/phpunit": "^7.3 || ^8.2 || ^9.3" - }, - "suggest": { - "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "NunoMaduro\\Larastan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", - "keywords": [ - "PHPStan", - "code analyse", - "code analysis", - "larastan", - "laravel", - "package", - "php", - "static analysis" - ], - "support": { - "issues": "https://github.com/nunomaduro/larastan/issues", - "source": "https://github.com/nunomaduro/larastan/tree/1.0.4" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/canvural", - "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2022-11-09T09:09:31+00:00" - }, { "name": "nunomaduro/termwind", "version": "v1.15.1", @@ -5087,116 +4000,52 @@ "forward-command": true }, "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2023-11-12T21:59:55+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "bcea0ae85868a89d5789c75f012c93129f842934" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/bcea0ae85868a89d5789c75f012c93129f842934", - "reference": "bcea0ae85868a89d5789c75f012c93129f842934", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.9-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ] + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" ], - "description": "PHPStan - PHP Static Analysis Tool", "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.1.2" + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" }, "funding": [ { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", + "url": "https://github.com/GrahamCampbell", "type": "github" }, { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", "type": "tidelift" } ], - "time": "2021-11-09T12:41:09+00:00" + "time": "2023-11-12T21:59:55+00:00" }, { "name": "predis/predis", @@ -5454,252 +4303,43 @@ ], "description": "Standard interfaces for event handling.", "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" - }, - "time": "2023-04-10T20:10:41+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", + "events", "psr", - "psr-3" + "psr-14" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2019-01-08T18:20:26+00:00" }, { - "name": "psr/simple-cache", - "version": "3.0.0", + "name": "psr/http-client", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\SimpleCache\\": "src/" + "Psr\\Http\\Client\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -5712,72 +4352,46 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for simple caching", + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ - "cache", - "caching", + "http", + "http-client", "psr", - "psr-16", - "simple-cache" + "psr-18" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + "source": "https://github.com/php-fig/http-client" }, - "time": "2021-10-29T13:26:27+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { - "name": "psy/psysh", - "version": "v0.11.22", + "name": "psr/http-factory", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b" + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b", - "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", "shasum": "" }, "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "nikic/php-parser": "^4.0 || ^3.1", - "php": "^8.0 || ^7.0.8", - "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" - }, - "conflict": { - "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" }, - "bin": [ - "bin/psysh" - ], "type": "library", "extra": { "branch-alias": { - "dev-0.11": "0.11.x-dev" - }, - "bamarni-bin": { - "bin-links": false, - "forward-command": false + "dev-master": "1.0.x-dev" } }, "autoload": { - "files": [ - "src/functions.php" - ], "psr-4": { - "Psy\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -5786,110 +4400,106 @@ ], "authors": [ { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "description": "Common interfaces for PSR-7 HTTP message factories", "keywords": [ - "REPL", - "console", - "interactive", - "shell" + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.22" + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" }, - "time": "2023-10-14T21:56:36+00:00" + "time": "2023-04-10T20:10:41+00:00" }, { - "name": "pusher/pusher-php-server", - "version": "5.0.3", + "name": "psr/http-message", + "version": "2.0", "source": { "type": "git", - "url": "https://github.com/pusher/pusher-http-php.git", - "reference": "1024077ff60beebaf5706b4e0208a1e648d20cf4" + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/1024077ff60beebaf5706b4e0208a1e648d20cf4", - "reference": "1024077ff60beebaf5706b4e0208a1e648d20cf4", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "ext-curl": "*", - "paragonie/sodium_compat": "^1.6", - "php": "^7.1|^8.0", - "psr/log": "^1.0" - }, - "require-dev": { - "overtrue/phplint": "^2.3", - "phpunit/phpunit": "^7.2|^8.5|^9.3" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Pusher\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Library for interacting with the Pusher REST API", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "events", - "messaging", - "php-pusher-server", - "publish", - "push", - "pusher", - "real time", - "real-time", - "realtime", - "rest", - "trigger" + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/pusher/pusher-http-php/issues", - "source": "https://github.com/pusher/pusher-http-php/tree/5.0.3" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2021-03-15T09:17:01+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { - "name": "ralouphie/getallheaders", - "version": "3.0.3", + "name": "psr/log", + "version": "1.1.4", "source": { "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, "autoload": { - "files": [ - "src/getallheaders.php" - ] + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5897,68 +4507,48 @@ ], "authors": [ { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "A polyfill for getallheaders.", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" + "source": "https://github.com/php-fig/log/tree/1.1.4" }, - "time": "2019-03-08T08:55:37+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { - "name": "ramsey/collection", - "version": "2.0.0", + "name": "psr/simple-cache", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": "^8.1" - }, - "require-dev": { - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", - "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" + "php": ">=8.0.0" }, "type": "library", "extra": { - "captainhook": { - "force-install": true - }, - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" + "branch-alias": { + "dev-master": "3.0.x-dev" } }, "autoload": { "psr-4": { - "Ramsey\\Collection\\": "src/" + "Psr\\SimpleCache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -5967,92 +4557,68 @@ ], "authors": [ { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "A PHP library for representing and manipulating collections.", + "description": "Common interfaces for simple caching", "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" ], "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" + "time": "2021-10-29T13:26:27+00:00" }, { - "name": "ramsey/uuid", - "version": "4.7.5", + "name": "psy/psysh", + "version": "v0.11.22", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" + "url": "https://github.com/bobthecow/psysh.git", + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b", + "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", "ext-json": "*", - "php": "^8.0", - "ramsey/collection": "^1.2 || ^2.0" + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" }, - "replace": { - "rhumsaa/uuid": "self.version" + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9", - "ramsey/composer-repl": "^1.4", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" + "bamarni/composer-bin-plugin": "^1.2" }, "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." }, + "bin": [ + "bin/psysh" + ], "type": "library", "extra": { - "captainhook": { - "force-install": true + "branch-alias": { + "dev-0.11": "0.11.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false } }, "autoload": { @@ -6060,189 +4626,188 @@ "src/functions.php" ], "psr-4": { - "Ramsey\\Uuid\\": "src/" + "Psy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", "keywords": [ - "guid", - "identifier", - "uuid" + "REPL", + "console", + "interactive", + "shell" ], "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.5" + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.22" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2023-11-08T05:53:05+00:00" + "time": "2023-10-14T21:56:36+00:00" }, { - "name": "react/promise", - "version": "v3.1.0", + "name": "pusher/pusher-php-server", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c" + "url": "https://github.com/pusher/pusher-http-php.git", + "reference": "1024077ff60beebaf5706b4e0208a1e648d20cf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", - "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", + "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/1024077ff60beebaf5706b4e0208a1e648d20cf4", + "reference": "1024077ff60beebaf5706b4e0208a1e648d20cf4", "shasum": "" }, "require": { - "php": ">=7.1.0" + "ext-curl": "*", + "paragonie/sodium_compat": "^1.6", + "php": "^7.1|^8.0", + "psr/log": "^1.0" }, "require-dev": { - "phpstan/phpstan": "1.10.39 || 1.4.10", - "phpunit/phpunit": "^9.6 || ^7.5" + "overtrue/phplint": "^2.3", + "phpunit/phpunit": "^7.2|^8.5|^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { - "React\\Promise\\": "src/" + "Pusher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "description": "Library for interacting with the Pusher REST API", "keywords": [ - "promise", - "promises" + "events", + "messaging", + "php-pusher-server", + "publish", + "push", + "pusher", + "real time", + "real-time", + "realtime", + "rest", + "trigger" ], "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.1.0" + "issues": "https://github.com/pusher/pusher-http-php/issues", + "source": "https://github.com/pusher/pusher-http-php/tree/5.0.3" }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2023-11-16T16:21:57+00:00" + "time": "2021-03-15T09:17:01+00:00" }, { - "name": "sabberworm/php-css-parser", - "version": "8.4.0", + "name": "ralouphie/getallheaders", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30", - "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "ext-iconv": "*", - "php": ">=5.6.20" + "php": ">=5.6" }, "require-dev": { - "codacy/coverage": "^1.4", - "phpunit/phpunit": "^4.8.36" - }, - "suggest": { - "ext-mbstring": "for parsing UTF-8 CSS" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", "autoload": { - "psr-4": { - "Sabberworm\\CSS\\": "src/" - } + "files": [ + "src/getallheaders.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Raphael Schweikert" - } - ], - "description": "Parser for CSS Files written in PHP", - "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", - "keywords": [ - "css", - "parser", - "stylesheet" - ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", "support": { - "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", - "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "time": "2021-12-11T13:40:54+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "seld/jsonlint", - "version": "1.10.0", + "name": "ramsey/collection", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1" + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/594fd6462aad8ecee0b45ca5045acea4776667f1", - "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0 || ^8.0" + "php": "^8.1" }, "require-dev": { - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" }, - "bin": [ - "bin/jsonlint" - ], "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, "autoload": { "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" + "Ramsey\\Collection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6251,116 +4816,157 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" } ], - "description": "JSON Linter", + "description": "A PHP library for representing and manipulating collections.", "keywords": [ - "json", - "linter", - "parser", - "validator" + "array", + "collection", + "hash", + "map", + "queue", + "set" ], "support": { - "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.10.0" + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.0.0" }, "funding": [ { - "url": "https://github.com/Seldaek", + "url": "https://github.com/ramsey", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", "type": "tidelift" } ], - "time": "2023-05-11T13:16:46+00:00" + "time": "2022-12-31T21:50:55+00:00" }, { - "name": "seld/phar-utils", - "version": "1.2.1", + "name": "ramsey/uuid", + "version": "4.7.5", "source": { "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c" + "url": "https://github.com/ramsey/uuid.git", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", "shasum": "" }, "require": { - "php": ">=5.3" + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.x-dev" + "captainhook": { + "force-install": true } }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Seld\\PharUtils\\": "src/" + "Ramsey\\Uuid\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "PHAR file format utilities, for when PHP phars you up", + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", "keywords": [ - "phar" + "guid", + "identifier", + "uuid" ], "support": { - "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1" + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.5" }, - "time": "2022-08-31T10:31:18+00:00" + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2023-11-08T05:53:05+00:00" }, { - "name": "seld/signal-handler", - "version": "2.0.2", + "name": "sabberworm/php-css-parser", + "version": "8.4.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/signal-handler.git", - "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98" + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", - "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30", "shasum": "" }, "require": { - "php": ">=7.2.0" + "ext-iconv": "*", + "php": ">=5.6.20" }, "require-dev": { - "phpstan/phpstan": "^1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^7.5.20 || ^8.5.23", - "psr/log": "^1 || ^2 || ^3" + "codacy/coverage": "^1.4", + "phpunit/phpunit": "^4.8.36" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" }, + "type": "library", "autoload": { "psr-4": { - "Seld\\Signal\\": "src/" + "Sabberworm\\CSS\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6369,24 +4975,21 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Raphael Schweikert" } ], - "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development", + "description": "Parser for CSS Files written in PHP", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", "keywords": [ - "posix", - "sigint", - "signal", - "sigterm", - "unix" + "css", + "parser", + "stylesheet" ], "support": { - "issues": "https://github.com/Seldaek/signal-handler/issues", - "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2" + "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" }, - "time": "2023-09-03T09:24:00+00:00" + "time": "2021-12-11T13:40:54+00:00" }, { "name": "spatie/db-dumper", @@ -7233,90 +5836,27 @@ "MIT" ], "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-05-23T14:45:45+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v7.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides basic utilities for the filesystem", + "description": "Generic abstractions related to dispatching event", "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -7332,7 +5872,7 @@ "type": "tidelift" } ], - "time": "2023-07-27T06:33:22+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/finder", @@ -8313,85 +6853,6 @@ ], "time": "2023-01-26T09:26:14+00:00" }, - { - "name": "symfony/polyfill-php73", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, { "name": "symfony/polyfill-php80", "version": "v1.28.0", @@ -8475,85 +6936,6 @@ ], "time": "2023-01-26T09:26:14+00:00" }, - { - "name": "symfony/polyfill-php81", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, { "name": "symfony/polyfill-php83", "version": "v1.28.0", @@ -9220,102 +7602,12 @@ "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Uid\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to generate and represent UIDs", - "homepage": "https://symfony.com", - "keywords": [ - "UID", - "ulid", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-10-31T08:18:17+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v6.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c40f7d17e91d8b407582ed51a2bbf83c52c367f6", - "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], + "symfony/console": "^5.4|^6.0|^7.0" + }, "type": "library", "autoload": { - "files": [ - "Resources/functions/dump.php" - ], "psr-4": { - "Symfony\\Component\\VarDumper\\": "" + "Symfony\\Component\\Uid\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -9326,6 +7618,10 @@ "MIT" ], "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -9335,14 +7631,15 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "description": "Provides an object-oriented API to generate and represent UIDs", "homepage": "https://symfony.com", "keywords": [ - "debug", - "dump" + "UID", + "ulid", + "uuid" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.0" + "source": "https://github.com/symfony/uid/tree/v6.4.0" }, "funding": [ { @@ -9358,39 +7655,49 @@ "type": "tidelift" } ], - "time": "2023-11-09T08:28:32+00:00" + "time": "2023-10-31T08:18:17+00:00" }, { - "name": "symfony/yaml", - "version": "v7.0.0", + "name": "symfony/var-dumper", + "version": "v6.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "0055b230c408428b9b5cde7c55659555be5c0278" + "url": "https://github.com/symfony/var-dumper.git", + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/0055b230c408428b9b5cde7c55659555be5c0278", - "reference": "0055b230c408428b9b5cde7c55659555be5c0278", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c40f7d17e91d8b407582ed51a2bbf83c52c367f6", + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "^1.8" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", + "twig/twig": "^2.13|^3.0.4" }, "bin": [ - "Resources/bin/yaml-lint" + "Resources/bin/var-dump-server" ], "type": "library", "autoload": { + "files": [ + "Resources/functions/dump.php" + ], "psr-4": { - "Symfony\\Component\\Yaml\\": "" + "Symfony\\Component\\VarDumper\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -9402,18 +7709,22 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Loads and dumps YAML files", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], "support": { - "source": "https://github.com/symfony/yaml/tree/v7.0.0" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.0" }, "funding": [ { @@ -9429,7 +7740,7 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:26:03+00:00" + "time": "2023-11-09T08:28:32+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -10101,40 +8412,231 @@ "version": "1.9.0", "source": { "type": "git", - "url": "https://github.com/beyondcode/laravel-dump-server.git", - "reference": "1f2452617afc64e47b3cf49978beb7beeef084df" + "url": "https://github.com/beyondcode/laravel-dump-server.git", + "reference": "1f2452617afc64e47b3cf49978beb7beeef084df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/1f2452617afc64e47b3cf49978beb7beeef084df", + "reference": "1f2452617afc64e47b3cf49978beb7beeef084df", + "shasum": "" + }, + "require": { + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", + "php": ">=7.2.5", + "symfony/var-dumper": "^5.0|^6.0" + }, + "require-dev": { + "larapack/dd": "^1.0", + "phpunit/phpunit": "^7.0|^9.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BeyondCode\\DumpServer\\DumpServerServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "helpers.php" + ], + "psr-4": { + "BeyondCode\\DumpServer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marcel Pociot", + "email": "marcel@beyondco.de", + "homepage": "https://beyondco.de", + "role": "Developer" + } + ], + "description": "Symfony Var-Dump Server for Laravel", + "homepage": "https://github.com/beyondcode/laravel-dump-server", + "keywords": [ + "beyondcode", + "laravel-dump-server" + ], + "support": { + "issues": "https://github.com/beyondcode/laravel-dump-server/issues", + "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.9.0" + }, + "time": "2023-02-15T10:29:26+00:00" + }, + { + "name": "clue/ndjson-react", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\NDJson\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", + "keywords": [ + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" + ], + "support": { + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-12-23T10:58:28+00:00" + }, + { + "name": "composer/pcre", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.1.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2023-10-11T07:11:09+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/1f2452617afc64e47b3cf49978beb7beeef084df", - "reference": "1f2452617afc64e47b3cf49978beb7beeef084df", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { - "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", - "php": ">=7.2.5", - "symfony/var-dumper": "^5.0|^6.0" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "larapack/dd": "^1.0", - "phpunit/phpunit": "^7.0|^9.3" + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "BeyondCode\\DumpServer\\DumpServerServiceProvider" - ] + "branch-alias": { + "dev-main": "3.x-dev" } }, "autoload": { - "files": [ - "helpers.php" - ], "psr-4": { - "BeyondCode\\DumpServer\\": "src" + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -10143,50 +8645,77 @@ ], "authors": [ { - "name": "Marcel Pociot", - "email": "marcel@beyondco.de", - "homepage": "https://beyondco.de", - "role": "Developer" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Symfony Var-Dump Server for Laravel", - "homepage": "https://github.com/beyondcode/laravel-dump-server", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ - "beyondcode", - "laravel-dump-server" + "semantic", + "semver", + "validation", + "versioning" ], "support": { - "issues": "https://github.com/beyondcode/laravel-dump-server/issues", - "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.9.0" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.0" }, - "time": "2023-02-15T10:29:26+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2023-08-31T09:50:34+00:00" }, { - "name": "clue/ndjson-react", - "version": "v1.3.0", + "name": "composer/xdebug-handler", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/clue/reactphp-ndjson.git", - "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", - "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { - "php": ">=5.3", - "react/stream": "^1.2" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", - "react/event-loop": "^1.2" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" }, "type": "library", "autoload": { "psr-4": { - "Clue\\React\\NDJson\\": "src/" + "Composer\\XdebugHandler\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -10195,35 +8724,35 @@ ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", - "homepage": "https://github.com/clue/reactphp-ndjson", + "description": "Restarts a process without Xdebug.", "keywords": [ - "NDJSON", - "json", - "jsonlines", - "newline", - "reactphp", - "streaming" + "Xdebug", + "performance" ], "support": { - "issues": "https://github.com/clue/reactphp-ndjson/issues", - "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" }, "funding": [ { - "url": "https://clue.engineering/support", + "url": "https://packagist.com", "type": "custom" }, { - "url": "https://github.com/clue", + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2022-12-23T10:58:28+00:00" + "time": "2022-02-25T21:32:43+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -10681,69 +9210,195 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.58.1" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2024-05-29T16:39:07+00:00" + }, + { + "name": "fzaninotto/faker", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "5ffe7db6c80f441f150fc88008d64e64af66634b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/5ffe7db6c80f441f150fc88008d64e64af66634b", + "reference": "5ffe7db6c80f441f150fc88008d64e64af66634b", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/fzaninotto/Faker/issues", + "source": "https://github.com/fzaninotto/Faker/tree/master" + }, + "abandoned": true, + "time": "2020-12-11T09:59:14+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" ], - "description": "A tool to automatically fix PHP code style", + "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ - "Static code analysis", - "fixer", - "standards", - "static analysis" + "test" ], "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.58.1" + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2024-05-29T16:39:07+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { - "name": "fzaninotto/faker", - "version": "dev-master", + "name": "larastan/larastan", + "version": "v2.9.8", "source": { "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "5ffe7db6c80f441f150fc88008d64e64af66634b" + "url": "https://github.com/larastan/larastan.git", + "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/5ffe7db6c80f441f150fc88008d64e64af66634b", - "reference": "5ffe7db6c80f441f150fc88008d64e64af66634b", + "url": "https://api.github.com/repos/larastan/larastan/zipball/340badd89b0eb5bddbc503a4829c08cf9a2819d7", + "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0" + "ext-json": "*", + "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0", + "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", + "php": "^8.0.2", + "phpmyadmin/sql-parser": "^5.9.0", + "phpstan/phpstan": "^1.11.2" }, "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" + "doctrine/coding-standard": "^12.0", + "nikic/php-parser": "^4.19.1", + "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", + "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3", + "phpunit/phpunit": "^9.6.13 || ^10.5.16" }, - "default-branch": true, - "type": "library", + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + }, + "type": "phpstan-extension", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "2.0-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { "psr-4": { - "Faker\\": "src/Faker/" + "Larastan\\Larastan\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -10752,21 +9407,48 @@ ], "authors": [ { - "name": "François Zaninotto" + "name": "Can Vural", + "email": "can9119@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "Faker is a PHP library that generates fake data for you.", + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", "keywords": [ - "data", - "faker", - "fixtures" + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" ], "support": { - "issues": "https://github.com/fzaninotto/Faker/issues", - "source": "https://github.com/fzaninotto/Faker/tree/master" + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v2.9.8" }, - "abandoned": true, - "time": "2020-12-11T09:59:14+00:00" + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/canvural", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-07-06T17:46:02+00:00" }, { "name": "maximebf/debugbar", @@ -10834,6 +9516,91 @@ }, "time": "2023-10-12T08:10:52+00:00" }, + { + "name": "mockery/mockery", + "version": "1.6.6", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.10", + "psalm/plugin-phpunit": "^0.18.4", + "symplify/easy-coding-standard": "^11.5.0", + "vimeo/psalm": "^4.30" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2023-08-09T00:03:52+00:00" + }, { "name": "myclabs/deep-copy", "version": "1.11.1", @@ -11311,6 +10078,94 @@ }, "time": "2023-08-12T11:01:26+00:00" }, + { + "name": "phpmyadmin/sql-parser", + "version": "5.9.0", + "source": { + "type": "git", + "url": "https://github.com/phpmyadmin/sql-parser.git", + "reference": "011fa18a4e55591fac6545a821921dd1d61c6984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984", + "reference": "011fa18a4e55591fac6545a821921dd1d61c6984", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "phpmyadmin/motranslator": "<3.0" + }, + "require-dev": { + "phpbench/phpbench": "^1.1", + "phpmyadmin/coding-standard": "^3.0", + "phpmyadmin/motranslator": "^4.0 || ^5.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.9.12", + "phpstan/phpstan-phpunit": "^1.3.3", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.11", + "zumba/json-serializer": "~3.0.2" + }, + "suggest": { + "ext-mbstring": "For best performance", + "phpmyadmin/motranslator": "Translate messages to your favorite locale" + }, + "bin": [ + "bin/highlight-query", + "bin/lint-query", + "bin/sql-parser", + "bin/tokenize-query" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpMyAdmin\\SqlParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "The phpMyAdmin Team", + "email": "developers@phpmyadmin.net", + "homepage": "https://www.phpmyadmin.net/team/" + } + ], + "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", + "homepage": "https://github.com/phpmyadmin/sql-parser", + "keywords": [ + "analysis", + "lexer", + "parser", + "query linter", + "sql", + "sql lexer", + "sql linter", + "sql parser", + "sql syntax highlighter", + "sql tokenizer" + ], + "support": { + "issues": "https://github.com/phpmyadmin/sql-parser/issues", + "source": "https://github.com/phpmyadmin/sql-parser" + }, + "funding": [ + { + "url": "https://www.phpmyadmin.net/donate/", + "type": "other" + } + ], + "time": "2024-01-20T20:34:02+00:00" + }, { "name": "phpstan/phpdoc-parser", "version": "1.24.4", @@ -11341,22 +10196,80 @@ }, "type": "library", "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" + }, + "time": "2023-11-26T18:29:22+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.11.10", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "640410b32995914bde3eed26fa89552f9c2c082f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f", + "reference": "640410b32995914bde3eed26fa89552f9c2c082f", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, - "time": "2023-11-26T18:29:22+00:00" + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2024-08-08T09:02:50+00:00" }, { "name": "phpunit/php-code-coverage", @@ -12079,6 +10992,79 @@ ], "time": "2023-11-13T13:48:05+00:00" }, + { + "name": "react/promise", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", + "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.1.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-16T16:21:57+00:00" + }, { "name": "react/socket", "version": "v1.15.0", @@ -14354,6 +13340,69 @@ ], "time": "2023-03-01T07:21:54+00:00" }, + { + "name": "symfony/filesystem", + "version": "v7.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7", + "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.0.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-27T06:33:22+00:00" + }, { "name": "symfony/options-resolver", "version": "v7.1.1", @@ -14421,6 +13470,85 @@ ], "time": "2024-05-31T14:57:53+00:00" }, + { + "name": "symfony/polyfill-php81", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, { "name": "symfony/stopwatch", "version": "v7.1.1", diff --git a/Website/htdocs/mpmanager/config/tickets.php b/Website/htdocs/mpmanager/config/tickets.php index b80602450..ef452cd80 100644 --- a/Website/htdocs/mpmanager/config/tickets.php +++ b/Website/htdocs/mpmanager/config/tickets.php @@ -1,10 +1,4 @@ [ diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_03_10_120408_create_companies_table.php b/Website/htdocs/mpmanager/database/migrations/2022_03_10_120408_create_companies_table.php similarity index 87% rename from Website/htdocs/mpmanager/database/migrations/base/2022_03_10_120408_create_companies_table.php rename to Website/htdocs/mpmanager/database/migrations/2022_03_10_120408_create_companies_table.php index 8622b1c2d..1259b2fe8 100644 --- a/Website/htdocs/mpmanager/database/migrations/base/2022_03_10_120408_create_companies_table.php +++ b/Website/htdocs/mpmanager/database/migrations/2022_03_10_120408_create_companies_table.php @@ -12,7 +12,7 @@ */ public function up() { - Schema::connection('micro_power_manager')->create('companies', function (Blueprint $table) { + Schema::create('companies', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('address'); diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_03_10_134450_create_company_databases_table.php b/Website/htdocs/mpmanager/database/migrations/2022_03_10_134450_create_company_databases_table.php similarity index 85% rename from Website/htdocs/mpmanager/database/migrations/base/2022_03_10_134450_create_company_databases_table.php rename to Website/htdocs/mpmanager/database/migrations/2022_03_10_134450_create_company_databases_table.php index 807328d2d..eaf5d0e78 100644 --- a/Website/htdocs/mpmanager/database/migrations/base/2022_03_10_134450_create_company_databases_table.php +++ b/Website/htdocs/mpmanager/database/migrations/2022_03_10_134450_create_company_databases_table.php @@ -12,7 +12,7 @@ */ public function up() { - Schema::connection('micro_power_manager')->create('company_databases', function (Blueprint $table) { + Schema::create('company_databases', function (Blueprint $table) { $table->id(); $table->integer('company_id')->unsigned(); $table->string('database_name'); diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_06_18_204649_create_database_proxies_table.php b/Website/htdocs/mpmanager/database/migrations/2022_06_18_204649_create_database_proxies_table.php similarity index 82% rename from Website/htdocs/mpmanager/database/migrations/base/2022_06_18_204649_create_database_proxies_table.php rename to Website/htdocs/mpmanager/database/migrations/2022_06_18_204649_create_database_proxies_table.php index 54794e13a..89646e23e 100644 --- a/Website/htdocs/mpmanager/database/migrations/base/2022_06_18_204649_create_database_proxies_table.php +++ b/Website/htdocs/mpmanager/database/migrations/2022_06_18_204649_create_database_proxies_table.php @@ -7,7 +7,7 @@ return new class() extends Migration { public function up(): void { - Schema::connection('micro_power_manager')->create('database_proxies', function (Blueprint $table) { + Schema::create('database_proxies', function (Blueprint $table) { $table->id(); $table->string('email'); $table->integer('fk_company_id'); diff --git a/Website/htdocs/mpmanager/database/migrations/2022_06_21_102121_create_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/2022_06_21_102121_create_mpm_plugins_table.php new file mode 100644 index 000000000..a9a478804 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2022_06_21_102121_create_mpm_plugins_table.php @@ -0,0 +1,94 @@ +id(); + $table->string('name'); + $table->string('description'); + $table->timestamps(); + }); + + DB::table('mpm_plugins')->insert([ + [ + 'id' => MpmPlugin::SPARK_METER, + 'name' => 'SparkMeter', + 'description' => 'This plugin uses KoiosAPI for the main authentication. After it got authenticated it uses the ThunderCloud API for basic CRUD operations. You need to enter the ThunderCloud Token on the site', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'id' => MpmPlugin::STEAMACO_METER, + 'name' => 'SteamaMeter', + 'description' => substr('This plugin integrates Steamaco meters to Micropowermanager. It uses the same credentials as ui.steama.co for authentication. After it got authenticated, the plugin synchronizes Site, Customer ..', 0, 191), + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'id' => MpmPlugin::CALIN_METER, + 'name' => 'CalinMeter', + 'description' => 'This plugin integrates Calin meters to Micropowermanager. It uses user_id & api_key for creating tokens for energy.', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'id' => MpmPlugin::CALIN_SMART_METER, + 'name' => 'CalinSmartMeter', + 'description' => 'This plugin integrates Calin meters to Micropowermanager. It uses company_name, user_name, password and password_vend for creating tokens for energy.', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'id' => MpmPlugin::KELIN_METER, + 'name' => 'KelinMeter', + 'description' => 'This plugin integrates Kelim meters to Micropowermanager. It uses username & password for creating tokens for energy.', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'id' => MpmPlugin::STRON_METER, + 'name' => 'StronMeter', + 'description' => 'This plugin integrates Stron meters to Micropowermanager. It uses the api login credentials for authentication.', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'id' => MpmPlugin::SWIFTA_PAYMENT_PROVIDER, + 'name' => 'SwiftaPayment', + 'description' => 'This plugin developed for getting Swifta payments into MicroPowerManager.', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'id' => MpmPlugin::MESOMB_PAYMENT_PROVIDER, + 'name' => 'MesombPayment', + 'description' => 'This plugin developed for getting MeSomb payments into MicroPowerManager.', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('mpm_plugins'); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_06_21_122032_add_email_to_companies_table.php b/Website/htdocs/mpmanager/database/migrations/2022_06_21_122032_add_email_to_companies_table.php similarity index 84% rename from Website/htdocs/mpmanager/database/migrations/base/2022_06_21_122032_add_email_to_companies_table.php rename to Website/htdocs/mpmanager/database/migrations/2022_06_21_122032_add_email_to_companies_table.php index 7a6678cd5..90f7731b4 100644 --- a/Website/htdocs/mpmanager/database/migrations/base/2022_06_21_122032_add_email_to_companies_table.php +++ b/Website/htdocs/mpmanager/database/migrations/2022_06_21_122032_add_email_to_companies_table.php @@ -12,7 +12,7 @@ */ public function up() { - Schema::connection('micro_power_manager')->table('companies', function (Blueprint $table) { + Schema::table('companies', function (Blueprint $table) { $table->string('email'); }); } diff --git a/Website/htdocs/mpmanager/database/migrations/2022_07_05_093903_add_tail_tag_to_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/2022_07_05_093903_add_tail_tag_to_mpm_plugins_table.php new file mode 100644 index 000000000..12b91e249 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2022_07_05_093903_add_tail_tag_to_mpm_plugins_table.php @@ -0,0 +1,52 @@ +string('tail_tag')->nullable(); + }); + + $mpm_plugins_mapping = [ + MpmPlugin::SPARK_METER => 'Spark Meter', + MpmPlugin::STEAMACO_METER => 'Steamaco Meter', + MpmPlugin::CALIN_METER => 'Calin Meter', + MpmPlugin::CALIN_SMART_METER => 'CalinSmart Meter', + MpmPlugin::KELIN_METER => 'Kelin Meter', + MpmPlugin::STRON_METER => 'Stron Meter', + MpmPlugin::SWIFTA_PAYMENT_PROVIDER => null, + MpmPlugin::MESOMB_PAYMENT_PROVIDER => null, + ]; + + foreach ($mpm_plugins_mapping as $id => $value) { + DB::table('mpm_plugins')->where('id', $id)->update([ + 'tail_tag' => $value, + 'updated_at' => Carbon::now(), + ]); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('mpm_plugins', function (Blueprint $table) { + $table->dropColumn('tail_tag'); + }); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2022_07_07_140545_add_installation_command_to_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/2022_07_07_140545_add_installation_command_to_mpm_plugins_table.php new file mode 100644 index 000000000..4a49b350d --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2022_07_07_140545_add_installation_command_to_mpm_plugins_table.php @@ -0,0 +1,52 @@ +string('installation_command')->nullable(); + }); + + $mpm_plugins_mapping = [ + MpmPlugin::SPARK_METER => 'spark-meter:install', + MpmPlugin::STEAMACO_METER => 'steama-meter:install', + MpmPlugin::CALIN_METER => 'calin-meter:install', + MpmPlugin::CALIN_SMART_METER => 'calin-smart-meter:install', + MpmPlugin::KELIN_METER => 'kelin-meter:install', + MpmPlugin::STRON_METER => 'stron-meter:installl', + MpmPlugin::SWIFTA_PAYMENT_PROVIDER => 'swifta-payment-provider:install', + MpmPlugin::MESOMB_PAYMENT_PROVIDER => 'mesomb-payment-provider:install', + ]; + + foreach ($mpm_plugins_mapping as $id => $value) { + DB::table('mpm_plugins')->where('id', $id)->update([ + 'installation_command' => $value, + 'updated_at' => Carbon::now(), + ]); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('mpm_plugins', function (Blueprint $table) { + $table->dropColumn('installation_command'); + }); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2022_09_20_0000000_add_bulk_registration_to_mpm_plugin_table.php b/Website/htdocs/mpmanager/database/migrations/2022_09_20_0000000_add_bulk_registration_to_mpm_plugin_table.php new file mode 100644 index 000000000..2e7d6aa79 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2022_09_20_0000000_add_bulk_registration_to_mpm_plugin_table.php @@ -0,0 +1,30 @@ +insert([ + [ + 'id' => MpmPlugin::BULK_REGISTRATION, + 'name' => 'BulkRegistration', + 'description' => substr('This plugin provides bulk registration of the company\'s existing records. NOTE: Please do not use this plugin to register your Spark & Stemaco meter records. These records will be synchronized automatically once you configure your credential settings for these plugins.', 0, 191), + 'tail_tag' => null, + 'installation_command' => 'bulk-registration:install', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + public function down() + { + DB::table('mpm_plugins') + ->where('id', MpmPlugin::BULK_REGISTRATION) + ->delete(); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2022_11_08_0000000_add_viber_messaging_to_mpm_plugin_table.php b/Website/htdocs/mpmanager/database/migrations/2022_11_08_0000000_add_viber_messaging_to_mpm_plugin_table.php new file mode 100644 index 000000000..94b62c239 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2022_11_08_0000000_add_viber_messaging_to_mpm_plugin_table.php @@ -0,0 +1,30 @@ +insert([ + [ + 'id' => MpmPlugin::VIBER_MESSAGING, + 'name' => 'ViberMessaging', + 'description' => 'This plugin developed for the communication with customers throughout Viber messages.', + 'tail_tag' => 'Viber Messaging', + 'installation_command' => 'viber-messaging:install', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + public function down() + { + DB::table('mpm_plugins') + ->where('id', MpmPlugin::VIBER_MESSAGING) + ->delete(); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_11_08_154321_update_email_field_for_database_proxies_table.php b/Website/htdocs/mpmanager/database/migrations/2022_11_08_154321_update_email_field_for_database_proxies_table.php similarity index 100% rename from Website/htdocs/mpmanager/database/migrations/base/2022_11_08_154321_update_email_field_for_database_proxies_table.php rename to Website/htdocs/mpmanager/database/migrations/2022_11_08_154321_update_email_field_for_database_proxies_table.php diff --git a/Website/htdocs/mpmanager/database/migrations/2022_11_21_000000_add_wave_money_payment_to_mpm_plugin_table.php b/Website/htdocs/mpmanager/database/migrations/2022_11_21_000000_add_wave_money_payment_to_mpm_plugin_table.php new file mode 100644 index 000000000..56ee866de --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2022_11_21_000000_add_wave_money_payment_to_mpm_plugin_table.php @@ -0,0 +1,30 @@ +insert([ + [ + 'id' => MpmPlugin::WAVE_MONEY_PAYMENT_PROVIDER, + 'name' => 'WaveMoneyPayment', + 'description' => 'This plugin developed for getting WaveMoney payments into MicroPowerManager.', + 'tail_tag' => 'WaveMoney', + 'installation_command' => 'wave-money-payment-provider:install', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + public function down() + { + DB::table('mpm_plugins') + ->where('id', MpmPlugin::WAVE_MONEY_PAYMENT_PROVIDER) + ->delete(); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_11_25_085948_create_jobs_table.php b/Website/htdocs/mpmanager/database/migrations/2022_11_25_085948_create_jobs_table.php similarity index 100% rename from Website/htdocs/mpmanager/database/migrations/base/2022_11_25_085948_create_jobs_table.php rename to Website/htdocs/mpmanager/database/migrations/2022_11_25_085948_create_jobs_table.php diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_11_25_091725_create_company_jobs.php b/Website/htdocs/mpmanager/database/migrations/2022_11_25_091725_create_company_jobs.php similarity index 100% rename from Website/htdocs/mpmanager/database/migrations/base/2022_11_25_091725_create_company_jobs.php rename to Website/htdocs/mpmanager/database/migrations/2022_11_25_091725_create_company_jobs.php diff --git a/Website/htdocs/mpmanager/database/migrations/2022_11_29_000000_add_micro_star_to_mpm_plugin_table.php b/Website/htdocs/mpmanager/database/migrations/2022_11_29_000000_add_micro_star_to_mpm_plugin_table.php new file mode 100644 index 000000000..11252416e --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2022_11_29_000000_add_micro_star_to_mpm_plugin_table.php @@ -0,0 +1,30 @@ +insert([ + [ + 'id' => MpmPlugin::MICRO_STAR_METERS, + 'name' => 'MicroStarMeter', + 'description' => 'This plugin integrates MicroStar meters to Micropowermanager. It uses user_id & api_key for creating tokens for energy.', + 'tail_tag' => 'MicroStar Meter', + 'installation_command' => 'micro-star-meter:install', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + public function down() + { + DB::table('mpm_plugins') + ->where('id', MpmPlugin::MICRO_STAR_METERS) + ->delete(); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2022_12_12_000000_add_root_class_to_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/2022_12_12_000000_add_root_class_to_mpm_plugins_table.php new file mode 100644 index 000000000..8ab70aa8f --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2022_12_12_000000_add_root_class_to_mpm_plugins_table.php @@ -0,0 +1,56 @@ +string('root_class')->nullable(); + }); + + $mpm_plugins_mapping = [ + MpmPlugin::SPARK_METER => 'SparkMeter', + MpmPlugin::STEAMACO_METER => 'SteamaMeter', + MpmPlugin::CALIN_METER => 'CalinMeter', + MpmPlugin::CALIN_SMART_METER => 'CalinSmartMeter', + MpmPlugin::KELIN_METER => 'KelinMeter', + MpmPlugin::STRON_METER => 'StronMeter', + MpmPlugin::SWIFTA_PAYMENT_PROVIDER => 'SwiftaPaymentProvider', + MpmPlugin::MESOMB_PAYMENT_PROVIDER => 'MesombPaymentProvider', + MpmPlugin::BULK_REGISTRATION => 'BulkRegistration', + MpmPlugin::VIBER_MESSAGING => 'ViberMessaging', + MpmPlugin::WAVE_MONEY_PAYMENT_PROVIDER => 'WaveMoneyPaymentProvider', + MpmPlugin::MICRO_STAR_METERS => 'MicroStarMeter', + ]; + + foreach ($mpm_plugins_mapping as $id => $value) { + DB::table('mpm_plugins')->where('id', $id)->update([ + 'root_class' => $value, + 'updated_at' => Carbon::now(), + ]); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('mpm_plugins', function (Blueprint $table) { + $table->dropColumn('root_class'); + }); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2022_14_12_000000_add_sun_king_to_mpm_plugin_table.php b/Website/htdocs/mpmanager/database/migrations/2022_14_12_000000_add_sun_king_to_mpm_plugin_table.php new file mode 100644 index 000000000..d031fc7c1 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2022_14_12_000000_add_sun_king_to_mpm_plugin_table.php @@ -0,0 +1,31 @@ +insert([ + [ + 'id' => MpmPlugin::SUN_KING_SHS, + 'name' => 'SunKingSHS', + 'description' => 'This plugin integrates SunKing solar home systems to Micropowermanager. It uses client_id & client_secret for creating tokens for energy.', + 'tail_tag' => 'SunKing SHS', + 'installation_command' => 'sun-king-shs:install', + 'root_class' => 'SunKingSHS', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + public function down() + { + DB::table('mpm_plugins') + ->where('id', MpmPlugin::SUN_KING_SHS) + ->delete(); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2023_01_24_110414_create_protected_pages_table.php b/Website/htdocs/mpmanager/database/migrations/2023_01_24_110414_create_protected_pages_table.php new file mode 100644 index 000000000..ece1942c6 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2023_01_24_110414_create_protected_pages_table.php @@ -0,0 +1,186 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + + DB::table('protected_pages')->insert([ + [ + 'name' => '/locations/add-cluster', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/locations/add-mini-grid', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/locations/add-village', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/settings', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/connection-groups', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/connection-types', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/profile/management', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/commissions', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/tariffs', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/targets', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/swifta-payment/swifta-payment-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/bulk-registration/bulk-registration', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/wave-money/wave-money-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/sun-king-meters/sun-king-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/kelin-meters/kelin-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/kelin-meters/kelin-setting', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/spark-meters/sm-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/spark-meters/sm-site', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/spark-meters/sm-tariff', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/spark-meters/sm-sales-account', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/spark-meters/sm-setting', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/steama-meters/steama-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/steama-meters/steama-site', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/steama-meters/steama-setting', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/stron-meters/stron-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/viber-messaging/viber-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/calin-meters/calin-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/calin-smart-meters/calin-smart-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/micro-star-meters/micro-star-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => '/gome-long-meters/gome-long-overview', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('protected_pages'); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2023_01_24_112359_add_protected_page_password_to_companies_table.php b/Website/htdocs/mpmanager/database/migrations/2023_01_24_112359_add_protected_page_password_to_companies_table.php similarity index 100% rename from Website/htdocs/mpmanager/database/migrations/base/2023_01_24_112359_add_protected_page_password_to_companies_table.php rename to Website/htdocs/mpmanager/database/migrations/2023_01_24_112359_add_protected_page_password_to_companies_table.php diff --git a/Website/htdocs/mpmanager/database/migrations/2023_02_06_000000_add_gome_long_to_mpm_plugin_table.php b/Website/htdocs/mpmanager/database/migrations/2023_02_06_000000_add_gome_long_to_mpm_plugin_table.php new file mode 100644 index 000000000..6eea92a5d --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2023_02_06_000000_add_gome_long_to_mpm_plugin_table.php @@ -0,0 +1,31 @@ +insert([ + [ + 'id' => MpmPlugin::GOME_LONG_METERS, + 'name' => 'GomeLongMeter', + 'description' => 'This plugin integrates GomeLong meters to Micropowermanager. It uses. user_id & user_password for creating tokens for energy.', + 'tail_tag' => 'GomeLong Meter', + 'installation_command' => 'gome-long-meter:install', + 'root_class' => 'GomeLongMeter', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + public function down() + { + DB::table('mpm_plugins') + ->where('id', MpmPlugin::GOME_LONG_METERS) + ->delete(); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2023_04_02_121811_add_wavecom_to_mpm_plugin_table.php b/Website/htdocs/mpmanager/database/migrations/2023_04_02_121811_add_wavecom_to_mpm_plugin_table.php new file mode 100644 index 000000000..ec598a9be --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2023_04_02_121811_add_wavecom_to_mpm_plugin_table.php @@ -0,0 +1,31 @@ +insert([ + [ + 'id' => MpmPlugin::WAVECOM_PAYMENT_PROVIDER, + 'name' => 'WavecomPayment', + 'description' => 'This plugin developed for getting Wavecom(Senegal) payments into MicroPowerManager.', + 'tail_tag' => null, + 'installation_command' => 'wavecom-payment-provider:install', + 'root_class' => 'WavecomPaymentProvider', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + public function down() + { + DB::table('mpm_plugins') + ->where('id', MpmPlugin::WAVECOM_PAYMENT_PROVIDER) + ->delete(); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2023_11_23_134944_update_description_column_in_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/2023_11_23_134944_update_description_column_in_mpm_plugins_table.php new file mode 100644 index 000000000..83144caff --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2023_11_23_134944_update_description_column_in_mpm_plugins_table.php @@ -0,0 +1,57 @@ +text('description')->change(); + }); + + $mpm_plugins_mapping = [ + MpmPlugin::STEAMACO_METER => 'This plugin integrates Steamaco meters to Micropowermanager. It uses the same credentials as ui.steama.co for authentication. After it got authenticated, the plugin synchronizes Site, Customer ..', + MpmPlugin::BULK_REGISTRATION => 'This plugin provides bulk registration of the company\'s existing records. NOTE: Please do not use this plugin to register your Spark & Stemaco meter records. These records will be synchronized automatically once you configure your credential settings for these plugins.', + ]; + + foreach ($mpm_plugins_mapping as $id => $value) { + DB::table('mpm_plugins')->where('id', $id)->update([ + 'description' => $value, + 'updated_at' => Carbon::now(), + ]); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $mpm_plugins_mapping = [ + MpmPlugin::STEAMACO_METER => 'This plugin integrates Steamaco meters to Micropowermanager. It uses the same credentials as ui.steama.co for authentication. After it got authenticated, the plugin synchronizes Site, Customer ..', + MpmPlugin::BULK_REGISTRATION => 'This plugin provides bulk registration of the company\'s existing records. NOTE: Please do not use this plugin to register your Spark & Stemaco meter records. These records will be synchronized automatically once you configure your credential settings for these plugins.', + ]; + + foreach ($mpm_plugins_mapping as $id => $value) { + DB::table('mpm_plugins')->where('id', $id)->update([ + 'description' => substr($value, 0, 191), + ]); + } + + Schema::table('mpm_plugins', function (Blueprint $table) { + $table->string('description')->change(); + }); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2024_01_01_000000_add_daly_bms_to_mpm_plugin_table.php b/Website/htdocs/mpmanager/database/migrations/2024_01_01_000000_add_daly_bms_to_mpm_plugin_table.php new file mode 100644 index 000000000..bd28f7200 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2024_01_01_000000_add_daly_bms_to_mpm_plugin_table.php @@ -0,0 +1,31 @@ +insert([ + [ + 'id' => MpmPlugin::DALY_BMS, + 'name' => 'DalyBms', + 'description' => 'This plugin developed for managing e-bikes with daly bms.', + 'tail_tag' => 'Daly Bms', + 'installation_command' => 'daly-bms:install', + 'root_class' => 'DalyBms', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + public function down() + { + DB::table('mpm_plugins') + ->where('id', MpmPlugin::DALY_BMS) + ->delete(); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2024_01_12_000000_add_angaza_to_mpm_plugin_table.php b/Website/htdocs/mpmanager/database/migrations/2024_01_12_000000_add_angaza_to_mpm_plugin_table.php new file mode 100644 index 000000000..949e21699 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2024_01_12_000000_add_angaza_to_mpm_plugin_table.php @@ -0,0 +1,31 @@ +insert([ + [ + 'id' => MpmPlugin::AGAZA_SHS, + 'name' => 'AngazaSHS', + 'description' => 'This plugin integrates Angaza solar home systems to Micropowermanager. It uses client_id & client_secret for creating tokens for energy.', + 'tail_tag' => 'Angaza SHS', + 'installation_command' => 'angaza-shs:install', + 'root_class' => 'AngazaSHS', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + public function down() + { + DB::table('mpm_plugins') + ->where('id', MpmPlugin::AGAZA_SHS) + ->delete(); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2024_02_07_100345_create_usage_types_table.php b/Website/htdocs/mpmanager/database/migrations/2024_02_07_100345_create_usage_types_table.php new file mode 100644 index 000000000..81bf6cb10 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2024_02_07_100345_create_usage_types_table.php @@ -0,0 +1,79 @@ +id(); + $table->string('name'); + $table->string('value'); + $table->timestamps(); + }); + + DB::table('usage_types')->insert([ + [ + 'name' => 'Mini-Grid', + 'value' => 'mini-grid', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => 'Solar Home System', + 'value' => 'shs', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => 'EBike Rental', + 'value' => 'e-bike', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => 'Mini-Grid & Solar Home System', + 'value' => 'mini-grid&shs', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => 'Mini-Grid & EBike Rental', + 'value' => 'mini-grid&e-bike', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => 'Solar Home & EBike Rental', + 'value' => 'shs&e-bike', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => 'Mini-Grid & Solar Home System & EBike Rental', + 'value' => 'mini-grid&shs&e-bike', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('usage_types'); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/2024_02_07_113319_add_usage_type_column_to_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/2024_02_07_113319_add_usage_type_column_to_mpm_plugins_table.php new file mode 100644 index 000000000..7240709c9 --- /dev/null +++ b/Website/htdocs/mpmanager/database/migrations/2024_02_07_113319_add_usage_type_column_to_mpm_plugins_table.php @@ -0,0 +1,66 @@ +enum('usage_type', [ + 'mini-grid', + 'shs', + 'e-bike', + 'general', + ])->default('general')->after('id'); + }); + + $mpm_plugins_mapping = [ + MpmPlugin::SPARK_METER => 'mini-grid', + MpmPlugin::STEAMACO_METER => 'mini-grid', + MpmPlugin::CALIN_METER => 'mini-grid', + MpmPlugin::CALIN_SMART_METER => 'mini-grid', + MpmPlugin::KELIN_METER => 'mini-grid', + MpmPlugin::STRON_METER => 'mini-grid', + MpmPlugin::SWIFTA_PAYMENT_PROVIDER => 'general', + MpmPlugin::MESOMB_PAYMENT_PROVIDER => 'general', + MpmPlugin::BULK_REGISTRATION => 'general', + MpmPlugin::VIBER_MESSAGING => 'general', + MpmPlugin::WAVE_MONEY_PAYMENT_PROVIDER => 'general', + MpmPlugin::MICRO_STAR_METERS => 'mini-grid', + MpmPlugin::SUN_KING_SHS => 'shs', + MpmPlugin::GOME_LONG_METERS => 'mini-grid', + MpmPlugin::WAVECOM_PAYMENT_PROVIDER => 'general', + MpmPlugin::DALY_BMS => 'e-bike', + MpmPlugin::AGAZA_SHS => 'shs', + ]; + + foreach ($mpm_plugins_mapping as $id => $value) { + DB::table('mpm_plugins')->where('id', $id)->update([ + 'usage_type' => $value, + 'updated_at' => Carbon::now(), + ]); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('mpm_plugins', function (Blueprint $table) { + $table->dropColumn('usage_type'); + }); + } +}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2024_03_21_121825_add_message_and_trace_columns_to_company_jobs_table.php b/Website/htdocs/mpmanager/database/migrations/2024_03_21_121825_add_message_and_trace_columns_to_company_jobs_table.php similarity index 70% rename from Website/htdocs/mpmanager/database/migrations/base/2024_03_21_121825_add_message_and_trace_columns_to_company_jobs_table.php rename to Website/htdocs/mpmanager/database/migrations/2024_03_21_121825_add_message_and_trace_columns_to_company_jobs_table.php index e27191885..63835b3f8 100644 --- a/Website/htdocs/mpmanager/database/migrations/base/2024_03_21_121825_add_message_and_trace_columns_to_company_jobs_table.php +++ b/Website/htdocs/mpmanager/database/migrations/2024_03_21_121825_add_message_and_trace_columns_to_company_jobs_table.php @@ -12,7 +12,7 @@ */ public function up() { - Schema::connection('micro_power_manager')->table('company_jobs', function (Blueprint $table) { + Schema::table('company_jobs', function (Blueprint $table) { $table->string('message')->nullable(); $table->string('trace')->nullable(); }); @@ -25,7 +25,9 @@ public function up() */ public function down() { - Schema::connection('micro_power_manager')->table('company_jobs', function (Blueprint $table) { + Schema::table('company_jobs', function (Blueprint $table) { + $table->dropColumn('message'); + $table->dropColumn('trace'); }); } }; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_06_21_102121_create_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/base/2022_06_21_102121_create_mpm_plugins_table.php deleted file mode 100644 index 022d19f42..000000000 --- a/Website/htdocs/mpmanager/database/migrations/base/2022_06_21_102121_create_mpm_plugins_table.php +++ /dev/null @@ -1,32 +0,0 @@ -create('mpm_plugins', function (Blueprint $table) { - $table->id(); - $table->string('name'); - $table->string('description'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('mpm_plugins'); - } -}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_07_05_093903_add_tail_tag_to_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/base/2022_07_05_093903_add_tail_tag_to_mpm_plugins_table.php deleted file mode 100644 index 62ef71b15..000000000 --- a/Website/htdocs/mpmanager/database/migrations/base/2022_07_05_093903_add_tail_tag_to_mpm_plugins_table.php +++ /dev/null @@ -1,31 +0,0 @@ -table('mpm_plugins', function (Blueprint $table) { - $table->string('tail_tag')->nullable(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('mpm_plugins', function (Blueprint $table) { - $table->dropColumn('tail_tag'); - }); - } -}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_07_07_140545_add_installation_command_to_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/base/2022_07_07_140545_add_installation_command_to_mpm_plugins_table.php deleted file mode 100644 index 0b1b45c04..000000000 --- a/Website/htdocs/mpmanager/database/migrations/base/2022_07_07_140545_add_installation_command_to_mpm_plugins_table.php +++ /dev/null @@ -1,31 +0,0 @@ -string('installation_command')->nullable(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('mpm_plugins', function (Blueprint $table) { - $table->dropColumn('installation_command'); - }); - } -}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2022_12_12_000000_add_root_class_to_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/base/2022_12_12_000000_add_root_class_to_mpm_plugins_table.php deleted file mode 100644 index 8fb38ff9f..000000000 --- a/Website/htdocs/mpmanager/database/migrations/base/2022_12_12_000000_add_root_class_to_mpm_plugins_table.php +++ /dev/null @@ -1,31 +0,0 @@ -string('root_class')->nullable(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('mpm_plugins', function (Blueprint $table) { - $table->dropColumn('root_class'); - }); - } -}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2023_01_24_110414_create_protected_pages_table.php b/Website/htdocs/mpmanager/database/migrations/base/2023_01_24_110414_create_protected_pages_table.php deleted file mode 100644 index f54094ca3..000000000 --- a/Website/htdocs/mpmanager/database/migrations/base/2023_01_24_110414_create_protected_pages_table.php +++ /dev/null @@ -1,31 +0,0 @@ -id(); - $table->string('name'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('protected_pages'); - } -}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2023_11_23_134944_update_description_column_in_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/base/2023_11_23_134944_update_description_column_in_mpm_plugins_table.php deleted file mode 100644 index 4f954eb97..000000000 --- a/Website/htdocs/mpmanager/database/migrations/base/2023_11_23_134944_update_description_column_in_mpm_plugins_table.php +++ /dev/null @@ -1,31 +0,0 @@ -table('mpm_plugins', function (Blueprint $table) { - $table->text('description')->change(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::connection('micropowermanager')->table('mpm_plugins', function (Blueprint $table) { - $table->string('description')->change(); - }); - } -}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2024_02_07_100345_create_usage_types_table.php b/Website/htdocs/mpmanager/database/migrations/base/2024_02_07_100345_create_usage_types_table.php deleted file mode 100644 index d2175f6fc..000000000 --- a/Website/htdocs/mpmanager/database/migrations/base/2024_02_07_100345_create_usage_types_table.php +++ /dev/null @@ -1,32 +0,0 @@ -create('usage_types', function (Blueprint $table) { - $table->id(); - $table->string('name'); - $table->string('value'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::connection('micro_power_manager')->dropIfExists('usage_types'); - } -}; diff --git a/Website/htdocs/mpmanager/database/migrations/base/2024_02_07_113319_add_usage_type_column_to_mpm_plugins_table.php b/Website/htdocs/mpmanager/database/migrations/base/2024_02_07_113319_add_usage_type_column_to_mpm_plugins_table.php deleted file mode 100644 index 19f2821dc..000000000 --- a/Website/htdocs/mpmanager/database/migrations/base/2024_02_07_113319_add_usage_type_column_to_mpm_plugins_table.php +++ /dev/null @@ -1,35 +0,0 @@ -table('mpm_plugins', function (Blueprint $table) { - $table->enum('usage_type', [ - 'mini-grid', - 'shs', - 'e-bike', - 'general', - ])->default('general')->after('id'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::connection('micro_power_manager')->table('mpm_plugins', function (Blueprint $table) { - }); - } -}; diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2018_12_11_083717_create_connection_types_table.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2018_12_11_083717_create_connection_types_table.php index f09ba045d..761656260 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2018_12_11_083717_create_connection_types_table.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2018_12_11_083717_create_connection_types_table.php @@ -1,7 +1,9 @@ string('name'); $table->timestamps(); }); + + DB::connection('shard')->table('connection_types')->insert([ + 'name' => 'default connection type', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_04_25_092438_create_sub_connection_types_table.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_04_25_092438_create_sub_connection_types_table.php index c682b2fd9..49d3254e3 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_04_25_092438_create_sub_connection_types_table.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_04_25_092438_create_sub_connection_types_table.php @@ -1,7 +1,9 @@ integer('tariff_id'); $table->timestamps(); }); + + DB::connection('shard')->table('sub_connection_types')->insert([ + 'name' => 'default sub connection type', + 'tariff_id' => 1, + 'connection_type_id' => 1, + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_05_01_103123_create_connection_groups_table.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_05_01_103123_create_connection_groups_table.php index 6a58b34ec..13b90825f 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_05_01_103123_create_connection_groups_table.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_05_01_103123_create_connection_groups_table.php @@ -1,7 +1,9 @@ string('name'); $table->timestamps(); }); + + DB::connection('shard')->table('connection_groups')->insert([ + 'name' => 'default connection group', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_12_16_091934_create_asset_types_table.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_12_16_091934_create_asset_types_table.php index 999328090..9bcdff593 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_12_16_091934_create_asset_types_table.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2019_12_16_091934_create_asset_types_table.php @@ -1,7 +1,9 @@ integer('price')->unsigned(); $table->timestamps(); }); + + // Insert initial data + DB::connection('shard')->table('asset_types')->insert([ + [ + 'name' => 'Solar Home System', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => 'E-Bike', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'name' => 'Electronics', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ] + ); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2020_12_17_144527_create_main_settings_table.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2020_12_17_144527_create_main_settings_table.php index 9da18e030..1434a59ea 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2020_12_17_144527_create_main_settings_table.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2020_12_17_144527_create_main_settings_table.php @@ -1,7 +1,9 @@ float('vat_appliance', 5); $table->timestamps(); }); + + DB::connection('shard')->table('main_settings')->insert([ + 'site_title' => 'MPM - The easiest way to manage your Mini-Grid', + 'company_name' => 'MicroPowerManager', + 'currency' => '€', + 'country' => 'Germany', + 'vat_energy' => 1, + 'vat_appliance' => 18, + 'language' => 'en', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2020_12_23_165814_create_map_settings_table.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2020_12_23_165814_create_map_settings_table.php index f0cffbe77..97b054ce8 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2020_12_23_165814_create_map_settings_table.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2020_12_23_165814_create_map_settings_table.php @@ -1,7 +1,9 @@ string('bingMapApiKey'); $table->timestamps(); }); + + DB::connection('shard')->table('map_settings')->insert([ + 'zoom' => 7, + 'latitude' => -2.500380, + 'longitude' => 32.889060, + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_01_05_234039_create_ticket_settings_table.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_01_05_234039_create_ticket_settings_table.php index 814396cc8..12249f907 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_01_05_234039_create_ticket_settings_table.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_01_05_234039_create_ticket_settings_table.php @@ -1,7 +1,9 @@ string('api_key'); $table->timestamps(); }); + + DB::connection('shard')->table('ticket_settings')->insert([ + 'name' => 'Trello', + 'api_token' => '----', + 'api_url' => 'https://api.trello.com/1', + 'api_key' => '----', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_02_18_153556_create_sms_bodies.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_02_18_153556_create_sms_bodies.php index 681eb7995..84c600487 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_02_18_153556_create_sms_bodies.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_02_18_153556_create_sms_bodies.php @@ -1,7 +1,9 @@ string('variables'); $table->timestamps(); }); + + DB::connection('shard')->table('sms_bodies')->insert([ + [ + 'reference' => 'SmsTransactionHeader', + 'place_holder' => 'Dear [name] [surname], we received your transaction [transaction_amount].', + 'body' => 'Dear [name] [surname], we received your transaction [transaction_amount].', + 'variables' => 'name,surname,transaction_amount', + 'title' => 'Sms Header', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'SmsReminderHeader', + 'place_holder' => 'Dear [name] [surname],', + 'body' => 'Dear [name] [surname],', + 'variables' => 'name,surname', + 'title' => 'Sms Header', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'SmsResendInformationHeader', + 'place_holder' => 'Dear [name] [surname], we received your resend last transaction information demand.', + 'body' => 'Dear [name] [surname], we received your resend last transaction information demand.', + 'variables' => 'name,surname', + 'title' => 'Sms Header', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'EnergyConfirmation', + 'place_holder' => 'Meter: [meter] , [token] Unit [energy] .', + 'body' => 'Meter: [meter] , [token] Unit [energy] .', + 'variables' => 'meter,token,energy', + 'title' => 'Meter Charge', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'AccessRateConfirmation', + 'place_holder' => 'Service Charge: [amount] ', + 'body' => 'Service Charge: [amount] ', + 'variables' => 'amount', + 'title' => 'Tariff Fixed Cost', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'AssetRateReminder', + 'place_holder' => 'the next rate of [appliance_type_name] ( . [remaining] . ) is due on [due_date]', + 'body' => 'the next rate of [appliance_type_name] ( . [remaining] . ) is due on [due_date]', + 'variables' => 'appliance_type_name,remaining,due_date', + 'title' => 'Appliance Payment Reminder', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'AssetRatePayment', + 'place_holder' => 'Appliance: [appliance_type_name] [amount]', + 'body' => 'Appliance: [appliance_type_name] [amount]', + 'variables' => 'appliance_type_name,amount', + 'title' => 'Appliance Payment', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'OverdueAssetRateReminder', + 'place_holder' => 'you forgot to pay the rate of [appliance_type_name] ( [remaining] ) on [due_date]. Please pay it as soon as possible, unless you wont be able to buy energy.', + 'body' => 'you forgot to pay the rate of [appliance_type_name] ( [remaining] ) on [due_date]. Please pay it as soon as possible, unless you wont be able to buy energy.', + 'variables' => 'appliance_type_name,remaining,due_date', + 'title' => 'Overdue Appliance Payment Reminder', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'PricingDetails', + 'place_holder' => 'Transaction amount is [amount], \n VAT for energy : [vat_energy] \n VAT for the other staffs : [vat_others] . ', + 'body' => 'Transaction amount is [amount], \n VAT for energy : [vat_energy] \n VAT for the other staffs : [vat_others] . ', + 'variables' => 'amount,vat_energy,vat_others', + 'title' => 'Pricing Details', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'ResendInformation', + 'place_holder' => 'Meter: [meter] , [token] Unit [energy] KWH. Service Charge: [amount]', + 'body' => 'Meter: [meter] , [token] Unit [energy] KWH. Service Charge: [amount]', + 'variables' => 'meter,token,energy,amount', + 'title' => 'Resend Last Transaction Information', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'ResendInformationLastTransactionNotFound', + 'place_holder' => 'Last transaction information not found for Meter: [meter]', + 'body' => 'Last transaction information not found for Meter: [meter]', + 'variables' => 'meter', + 'title' => 'Last Transaction Information Not Found', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'SmsReminderFooter', + 'place_holder' => 'Your Company etc.', + 'body' => 'Your Company etc.', + 'variables' => '', + 'title' => 'Sms Footer', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'SmsTransactionFooter', + 'place_holder' => 'Your Company etc.', + 'body' => 'Your Company etc.', + 'variables' => '', + 'title' => 'Sms Footer', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'reference' => 'SmsResendInformationFooter', + 'place_holder' => 'Your Company etc.', + 'body' => 'Your Company etc.', + 'variables' => '', + 'title' => 'Sms Footer', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ] + ); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_02_18_153556_create_sms_resend_information_keys.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_02_18_153556_create_sms_resend_information_keys.php index e3e2a0a22..5ca55db74 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_02_18_153556_create_sms_resend_information_keys.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_02_18_153556_create_sms_resend_information_keys.php @@ -1,7 +1,9 @@ string('key')->default('Resend'); $table->timestamps(); }); + + DB::connection('shard')->table('sms_resend_information_keys')->insert([ + 'key' => 'Resend', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_03_03_141706_create_sms_variable_default_values.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_03_03_141706_create_sms_variable_default_values.php index 6a05084e4..cfc7e49e7 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_03_03_141706_create_sms_variable_default_values.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_03_03_141706_create_sms_variable_default_values.php @@ -1,7 +1,9 @@ string('value'); $table->timestamps(); }); + + DB::connection('shard')->table('sms_variable_default_values')->insert([ + [ + 'variable' => 'name', + 'value' => 'Herbert', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'surname', + 'value' => 'Kale', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'amount', + 'value' => '1000', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'appliance_type_name', + 'value' => 'fridge', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'remaining', + 'value' => '3', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'due_date', + 'value' => '2021/04/01', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'meter', + 'value' => '47782371232', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'token', + 'value' => '5111 3511 9911 1177 7711', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'vat_energy', + 'value' => '15', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'vat_others', + 'value' => '10', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'energy', + 'value' => '5123.1', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + [ + 'variable' => 'transaction_amount', + 'value' => '500', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ], + ]); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_10_18_220817_create_mail_settings.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_10_18_220817_create_mail_settings.php index 5ad5f8303..a0516f533 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_10_18_220817_create_mail_settings.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2021_10_18_220817_create_mail_settings.php @@ -1,7 +1,9 @@ string('mail_password'); $table->timestamps(); }); + + DB::connection('shard')->table('mail_settings')->insert([ + 'mail_host' => 'smtp.example.com', + 'mail_port' => 123, + 'mail_encryption' => 'tls', + 'mail_username' => 'example@domain.com', + 'mail_password' => '123123', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]); } /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2022_07_20_101605_create_ticketing_tables.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2022_07_20_101605_create_ticketing_tables.php index 4923ee663..f282829eb 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2022_07_20_101605_create_ticketing_tables.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2022_07_20_101605_create_ticketing_tables.php @@ -4,12 +4,6 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -/** - * Created by PhpStorm. - * User: kemal - * Date: 23.08.18 - * Time: 10:39. - */ class CreateTicketingTables extends Migration { /** diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2023-04-02_1232123_create_wavecom_tables.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2023_04_02_121811_create_wavecom_tables.php similarity index 100% rename from Website/htdocs/mpmanager/database/migrations/micropowermanager/2023-04-02_1232123_create_wavecom_tables.php rename to Website/htdocs/mpmanager/database/migrations/micropowermanager/2023_04_02_121811_create_wavecom_tables.php diff --git a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2023_06_02_create_gome_long_tables.php b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2023_06_02_create_gome_long_tables.php index 6305f01b6..8eccd3677 100644 --- a/Website/htdocs/mpmanager/database/migrations/micropowermanager/2023_06_02_create_gome_long_tables.php +++ b/Website/htdocs/mpmanager/database/migrations/micropowermanager/2023_06_02_create_gome_long_tables.php @@ -4,6 +4,8 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; +// Despite the migration's name, this migration was actually created on Feb 6h +// Name should be 2023-02-06 not 2023-06-02... return new class() extends Migration { public function up() { diff --git a/Website/htdocs/mpmanager/database/seeders/AssetTypesSeeder.php b/Website/htdocs/mpmanager/database/seeders/AssetTypesSeeder.php deleted file mode 100644 index 22de0fb25..000000000 --- a/Website/htdocs/mpmanager/database/seeders/AssetTypesSeeder.php +++ /dev/null @@ -1,37 +0,0 @@ -table('asset_types')->insert([ - [ - 'name' => 'Solar Home System', - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ], - [ - 'name' => 'E-Bike', - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ], - [ - 'name' => 'Electronics', - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ], - ] - ); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/ConnectionGroupSeeder.php b/Website/htdocs/mpmanager/database/seeders/ConnectionGroupSeeder.php deleted file mode 100644 index 85c78ffd9..000000000 --- a/Website/htdocs/mpmanager/database/seeders/ConnectionGroupSeeder.php +++ /dev/null @@ -1,19 +0,0 @@ -table('connection_groups')->insert([ - 'name' => 'default connection group', - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ]); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/ConnectionTypeSeeder.php b/Website/htdocs/mpmanager/database/seeders/ConnectionTypeSeeder.php deleted file mode 100644 index 754da79f7..000000000 --- a/Website/htdocs/mpmanager/database/seeders/ConnectionTypeSeeder.php +++ /dev/null @@ -1,19 +0,0 @@ -table('connection_types')->insert([ - 'name' => 'default connection type', - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ]); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/DatabaseSeeder.php b/Website/htdocs/mpmanager/database/seeders/DatabaseSeeder.php deleted file mode 100644 index de56efb83..000000000 --- a/Website/htdocs/mpmanager/database/seeders/DatabaseSeeder.php +++ /dev/null @@ -1,30 +0,0 @@ -call(ConnectionTypeSeeder::class); - $this->call(SubConnectionTypeSeeder::class); - $this->call(MenuItemsSeeder::class); - $this->call(SubMenuItemsSeeder::class); - $this->call(ConnectionGroupSeeder::class); - $this->call(MainSettingsSeeder::class); - $this->call(MapSettingsSeeder::class); - $this->call(TicketSettingsSeeder::class); - $this->call(SmsBodiesSeeder::class); - $this->call(SmsResendInformationKeySeeder::class); - $this->call(SmsVariableDefaultValuesSeeder::class); - $this->call(MailSettingsSeeder::class); - $this->call(AssetTypesSeeder::class); - } -} diff --git a/Website/ui/src/plugins/angaza-shs/js/eventbus.js b/Website/htdocs/mpmanager/database/seeders/DummyCompanySeeder.php similarity index 100% rename from Website/ui/src/plugins/angaza-shs/js/eventbus.js rename to Website/htdocs/mpmanager/database/seeders/DummyCompanySeeder.php diff --git a/Website/htdocs/mpmanager/database/seeders/MailSettingsSeeder.php b/Website/htdocs/mpmanager/database/seeders/MailSettingsSeeder.php deleted file mode 100644 index f8ea02ad1..000000000 --- a/Website/htdocs/mpmanager/database/seeders/MailSettingsSeeder.php +++ /dev/null @@ -1,28 +0,0 @@ -table('mail_settings')->insert([ - 'mail_host' => 'smtp.example.com', - 'mail_port' => 123, - 'mail_encryption' => 'tls', - 'mail_username' => 'example@domain.com', - 'mail_password' => '123123', - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ]); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/MainSettingsSeeder.php b/Website/htdocs/mpmanager/database/seeders/MainSettingsSeeder.php deleted file mode 100644 index a5a7a46a6..000000000 --- a/Website/htdocs/mpmanager/database/seeders/MainSettingsSeeder.php +++ /dev/null @@ -1,30 +0,0 @@ -table('main_settings')->insert([ - 'site_title' => 'MPM - The easiest way to manage your Mini-Grid', - 'company_name' => 'MicroPowerManager', - 'currency' => '€', - 'country' => 'Germany', - 'vat_energy' => 1, - 'vat_appliance' => 18, - 'language' => 'en', - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ]); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/ManufacturerSeeder.php b/Website/htdocs/mpmanager/database/seeders/ManufacturerSeeder.php deleted file mode 100644 index cf3803e87..000000000 --- a/Website/htdocs/mpmanager/database/seeders/ManufacturerSeeder.php +++ /dev/null @@ -1,21 +0,0 @@ -table('manufacturers')->insert([ - 'name' => 'Calin Meters STS', - 'website' => 'http://www.calinmeter.com/', - 'api_name' => 'CalinApi', - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ]); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/MapSettingsSeeder.php b/Website/htdocs/mpmanager/database/seeders/MapSettingsSeeder.php deleted file mode 100644 index 967fe2be9..000000000 --- a/Website/htdocs/mpmanager/database/seeders/MapSettingsSeeder.php +++ /dev/null @@ -1,26 +0,0 @@ -table('map_settings')->insert([ - 'zoom' => 7, - 'latitude' => -2.500380, - 'longitude' => 32.889060, - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ]); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/MenuItemsSeeder.php b/Website/htdocs/mpmanager/database/seeders/MenuItemsSeeder.php deleted file mode 100644 index 75a2f7416..000000000 --- a/Website/htdocs/mpmanager/database/seeders/MenuItemsSeeder.php +++ /dev/null @@ -1,119 +0,0 @@ -table('menu_items')->insert([ - [ - 'name' => 'Dashboard', - 'url_slug' => '/', - 'md_icon' => 'home', - 'menu_order' => '1', - 'usage_type' => 'general', - ], - [ - 'name' => 'Customers', - 'url_slug' => '/people/page/1', - 'md_icon' => 'supervisor_account', - 'menu_order' => '2', - 'usage_type' => 'general', - ], - [ - 'name' => 'Agents', - 'url_slug' => '', - 'md_icon' => 'support_agent', - 'menu_order' => '3', - 'usage_type' => 'general', - ], - [ - 'name' => 'Meters', - 'url_slug' => '', - 'md_icon' => 'bolt', - 'menu_order' => '4', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'Transactions', - 'url_slug' => '/transactions/page/1', - 'md_icon' => 'account_balance', - 'menu_order' => '5', - 'usage_type' => 'general', - ], - [ - 'name' => 'Tickets', - 'url_slug' => '', - 'md_icon' => 'confirmation_number', - 'menu_order' => '6', - 'usage_type' => 'general', - ], - [ - 'name' => 'Tariffs', - 'url_slug' => '/tariffs', - 'md_icon' => 'widgets', - 'menu_order' => '7', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'Targets', - 'url_slug' => '/targets', - 'md_icon' => 'gps_fixed', - 'menu_order' => '8', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'Reports', - 'url_slug' => '/reports', - 'md_icon' => 'text_snippet', - 'menu_order' => '9', - 'usage_type' => 'general', - ], - [ - 'name' => 'Messages', - 'url_slug' => '', - 'md_icon' => 'sms', - 'menu_order' => '10', - 'usage_type' => 'general', - ], - [ - 'name' => 'Appliances', - 'url_slug' => '/assets/page/1', - 'md_icon' => 'devices_other', - 'menu_order' => '11', - 'usage_type' => 'general', - ], - [ - 'name' => 'Maintenance', - 'url_slug' => '/maintenance', - 'md_icon' => 'home_repair_service', - 'menu_order' => '12', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'Solar Home Systems', - 'url_slug' => '/solar-home-systems/page/1', - 'md_icon' => 'solar_power', - 'menu_order' => '13', - 'usage_type' => 'shs', - ], - [ - 'name' => 'E-Bikes', - 'url_slug' => '/e-bikes/page/1', - 'md_icon' => 'electric_bike', - 'menu_order' => '14', - 'usage_type' => 'e-bike', - ], - ] - ); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/MpmPluginsSeeder.php b/Website/htdocs/mpmanager/database/seeders/MpmPluginsSeeder.php deleted file mode 100644 index 84f77b125..000000000 --- a/Website/htdocs/mpmanager/database/seeders/MpmPluginsSeeder.php +++ /dev/null @@ -1,157 +0,0 @@ -table('mpm_plugins')->insert([ - [ - 'name' => 'SparkMeter', - 'description' => 'This plugin uses KoiosAPI for the main authentication. After it got authenticated it uses the ThunderCloud API for basic CRUD operations. You need to enter the ThunderCloud Token on the site', - 'tail_tag' => 'Spark Meter', - 'installation_command' => 'spark-meter:install', - 'root_class' => 'SparkMeter', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'SteamaMeter', - 'description' => 'This plugin integrates Steamaco meters to Micropowermanager. It uses the same credentials as ui.steama.co for authentication. After it got authenticated, the plugin synchronizes Site, Customer ..', - 'tail_tag' => 'Steamaco Meter', - 'installation_command' => 'steama-meter:install', - 'root_class' => 'SteamaMeter', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'CalinMeter', - 'description' => 'This plugin integrates Calin meters to Micropowermanager. It uses user_id & api_key for creating tokens for energy.', - 'tail_tag' => 'Calin Meter', - 'installation_command' => 'calin-meter:install', - 'root_class' => 'CalinMeter', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'CalinSmartMeter', - 'description' => 'This plugin integrates Calin meters to Micropowermanager. It uses company_name, user_name, password and password_vend for creating tokens for energy.', - 'tail_tag' => 'CalinSmart Meter', - 'installation_command' => 'calin-smart-meter:install', - 'root_class' => 'CalinSmartMeter', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'KelinMeter', - 'description' => 'This plugin integrates Kelim meters to Micropowermanager. It uses username & password for creating tokens for energy.', - 'tail_tag' => 'Kelin Meter', - 'installation_command' => 'kelin-meter:install', - 'root_class' => 'KelinMeter', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'StronMeter', - 'description' => 'This plugin integrates Stron meters to Micropowermanager. It uses the api login credentials for authentication.', - 'tail_tag' => 'Stron Meter', - 'installation_command' => 'stron-meter:installl', - 'root_class' => 'StronMeter', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'SwiftaPayment', - 'description' => 'This plugin developed for getting Swifta payments into MicroPowerManager.', - 'tail_tag' => null, - 'installation_command' => 'swifta-payment-provider:install', - 'root_class' => 'SwiftaPaymentProvider', - 'usage_type' => 'general', - ], - [ - 'name' => 'MesombPayment', - 'description' => 'This plugin developed for getting MeSomb payments into MicroPowerManager.', - 'tail_tag' => null, - 'installation_command' => 'mesomb-payment-provider:install', - 'root_class' => 'MesombPaymentProvider', - 'usage_type' => 'general', - ], - [ - 'name' => 'BulkRegistration', - 'description' => 'This plugin provides bulk registration of the company\'s existing records. NOTE: Please do not use this plugin to register your Spark & Stemaco meter records. These records will be synchronized automatically once you configure your credential settings for these plugins.', - 'tail_tag' => null, - 'installation_command' => 'bulk-registration:install', - 'root_class' => 'BulkRegistration', - 'usage_type' => 'general', - ], - [ - 'name' => 'ViberMessaging', - 'description' => 'This plugin developed for the communication with customers throughout Viber messages.', - 'tail_tag' => 'Viber Messaging', - 'installation_command' => 'viber-messaging:install', - 'root_class' => 'ViberMessaging', - 'usage_type' => 'general', - ], - [ - 'name' => 'WaveMoneyPayment', - 'description' => 'This plugin developed for getting WaveMoney payments into MicroPowerManager.', - 'tail_tag' => 'WaveMoney', - 'installation_command' => 'wave-money-payment-provider:install', - 'root_class' => 'WaveMoneyPaymentProvider', - 'usage_type' => 'general', - ], - [ - 'name' => 'MicroStarMeter', - 'description' => 'This plugin integrates MicroStar meters to Micropowermanager. It uses user_id & api_key for creating tokens for energy.', - 'tail_tag' => 'MicroStar Meter', - 'installation_command' => 'micro-star-meter:install', - 'root_class' => 'MicroStarMeter', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'SunKingSHS', - 'description' => 'This plugin integrates SunKing solar home systems to Micropowermanager. It uses client_id & client_secret for creating tokens for energy.', - 'tail_tag' => 'SunKing SHS', - 'installation_command' => 'sun-king-shs:install', - 'root_class' => 'SunKingSHS', - 'usage_type' => 'shs', - ], - [ - 'name' => 'GomeLongMeter', - 'description' => 'This plugin integrates GomeLong meters to Micropowermanager. It uses. user_id & user_password for creating tokens for energy.', - 'tail_tag' => 'GomeLong Meter', - 'installation_command' => 'gome-long-meter:install', - 'root_class' => 'GomeLongMeter', - 'usage_type' => 'mini-grid', - ], - [ - 'name' => 'WavecomPayment', - 'description' => 'This plugin developed for getting Wavecom(Senegal) payments into MicroPowerManager.', - 'tail_tag' => null, - 'installation_command' => 'wavecom-payment-provider:install', - 'root_class' => 'WavecomPaymentProvider', - 'usage_type' => 'general', - ], - [ - 'name' => 'DalyBms', - 'description' => 'This plugin developed for managing e-bikes with daly bms.', - 'tail_tag' => 'Daly Bms', - 'installation_command' => 'daly-bms:install', - 'root_class' => 'DalyBms', - 'usage_type' => 'e-bike', - ], - [ - 'name' => 'AngazaSHS', - 'description' => 'This plugin integrates Angaza solar home systems to Micropowermanager. It uses client_id & client_secret for creating tokens for energy.', - 'tail_tag' => 'Angaza SHS', - 'installation_command' => 'angaza-shs:install', - 'root_class' => 'AngazaSHS', - 'usage_type' => 'shs', - ], - ] - ); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/ProtectedPagesSeeder.php b/Website/htdocs/mpmanager/database/seeders/ProtectedPagesSeeder.php deleted file mode 100644 index 8161220b2..000000000 --- a/Website/htdocs/mpmanager/database/seeders/ProtectedPagesSeeder.php +++ /dev/null @@ -1,50 +0,0 @@ -table('protected_pages')->insert([ - ['name' => '/locations/add-cluster'], - ['name' => '/locations/add-mini-grid'], - ['name' => '/locations/add-village'], - ['name' => '/settings'], - ['name' => '/connection-groups'], - ['name' => '/connection-types'], - ['name' => '/profile/management'], - ['name' => '/commissions'], - ['name' => '/tariffs'], - ['name' => '/targets'], - ['name' => '/swifta-payment/swifta-payment-overview'], - ['name' => '/bulk-registration/bulk-registration'], - ['name' => '/wave-money/wave-money-overview'], - ['name' => '/sun-king-meters/sun-king-overview'], - ['name' => '/kelin-meters/kelin-overview'], - ['name' => '/kelin-meters/kelin-setting'], - ['name' => '/spark-meters/sm-overview'], - ['name' => '/spark-meters/sm-site'], - ['name' => '/spark-meters/sm-tariff'], - ['name' => '/spark-meters/sm-sales-account'], - ['name' => '/spark-meters/sm-setting'], - ['name' => '/steama-meters/steama-overview'], - ['name' => '/steama-meters/steama-site'], - ['name' => '/steama-meters/steama-setting'], - ['name' => '/stron-meters/stron-overview'], - ['name' => '/viber-messaging/viber-overview'], - ['name' => '/calin-meters/calin-overview'], - ['name' => '/calin-smart-meters/calin-smart-overview'], - ['name' => '/micro-star-meters/micro-star-overview'], - ['name' => '/gome-long-meters/gome-long-overview'], - ]); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/ShardingDatabaseSeeder.php b/Website/htdocs/mpmanager/database/seeders/ShardingDatabaseSeeder.php deleted file mode 100644 index 1bf1d8a07..000000000 --- a/Website/htdocs/mpmanager/database/seeders/ShardingDatabaseSeeder.php +++ /dev/null @@ -1,15 +0,0 @@ -call(MpmPluginsSeeder::class); - $this->call(ProtectedPagesSeeder::class); - $this->call(UsageTypeSeeder::class); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/SmsBodiesSeeder.php b/Website/htdocs/mpmanager/database/seeders/SmsBodiesSeeder.php deleted file mode 100644 index e7f68cedb..000000000 --- a/Website/htdocs/mpmanager/database/seeders/SmsBodiesSeeder.php +++ /dev/null @@ -1,119 +0,0 @@ -table('sms_bodies')->insert([ - [ - 'reference' => 'SmsTransactionHeader', - 'place_holder' => 'Dear [name] [surname], we received your transaction [transaction_amount].', - 'body' => 'Dear [name] [surname], we received your transaction [transaction_amount].', - 'variables' => 'name,surname,transaction_amount', - 'title' => 'Sms Header', - ], - [ - 'reference' => 'SmsReminderHeader', - 'place_holder' => 'Dear [name] [surname],', - 'body' => 'Dear [name] [surname],', - 'variables' => 'name,surname', - 'title' => 'Sms Header', - ], - [ - 'reference' => 'SmsResendInformationHeader', - 'place_holder' => 'Dear [name] [surname], we received your resend last transaction information demand.', - 'body' => 'Dear [name] [surname], we received your resend last transaction information demand.', - 'variables' => 'name,surname', - 'title' => 'Sms Header', - ], - [ - 'reference' => 'EnergyConfirmation', - 'place_holder' => 'Meter: [meter] , [token] Unit [energy] .', - 'body' => 'Meter: [meter] , [token] Unit [energy] .', - 'variables' => 'meter,token,energy', - 'title' => 'Meter Charge', - ], - [ - 'reference' => 'AccessRateConfirmation', - 'place_holder' => 'Service Charge: [amount] ', - 'body' => 'Service Charge: [amount] ', - 'variables' => 'amount', - 'title' => 'Tariff Fixed Cost', - ], - [ - 'reference' => 'AssetRateReminder', - 'place_holder' => 'the next rate of [appliance_type_name] ( . [remaining] . ) is due on [due_date]', - 'body' => 'the next rate of [appliance_type_name] ( . [remaining] . ) is due on [due_date]', - 'variables' => 'appliance_type_name,remaining,due_date', - 'title' => 'Appliance Payment Reminder', - ], - [ - 'reference' => 'AssetRatePayment', - 'place_holder' => 'Appliance: [appliance_type_name] [amount]', - 'body' => 'Appliance: [appliance_type_name] [amount]', - 'variables' => 'appliance_type_name,amount', - 'title' => 'Appliance Payment', - ], - [ - 'reference' => 'OverdueAssetRateReminder', - 'place_holder' => 'you forgot to pay the rate of [appliance_type_name] ( [remaining] ) on [due_date]. Please pay it as soon as possible, unless you wont be able to buy energy.', - 'body' => 'you forgot to pay the rate of [appliance_type_name] ( [remaining] ) on [due_date]. Please pay it as soon as possible, unless you wont be able to buy energy.', - 'variables' => 'appliance_type_name,remaining,due_date', - 'title' => 'Overdue Appliance Payment Reminder', - ], - [ - 'reference' => 'PricingDetails', - 'place_holder' => 'Transaction amount is [amount], \n VAT for energy : [vat_energy] \n VAT for the other staffs : [vat_others] . ', - 'body' => 'Transaction amount is [amount], \n VAT for energy : [vat_energy] \n VAT for the other staffs : [vat_others] . ', - 'variables' => 'amount,vat_energy,vat_others', - 'title' => 'Pricing Details', - ], - [ - 'reference' => 'ResendInformation', - 'place_holder' => 'Meter: [meter] , [token] Unit [energy] KWH. Service Charge: [amount]', - 'body' => 'Meter: [meter] , [token] Unit [energy] KWH. Service Charge: [amount]', - 'variables' => 'meter,token,energy,amount', - 'title' => 'Resend Last Transaction Information', - ], - [ - 'reference' => 'ResendInformationLastTransactionNotFound', - 'place_holder' => 'Last transaction information not found for Meter: [meter]', - 'body' => 'Last transaction information not found for Meter: [meter]', - 'variables' => 'meter', - 'title' => 'Last Transaction Information Not Found', - ], - [ - 'reference' => 'SmsReminderFooter', - 'place_holder' => 'Your Company etc.', - 'body' => 'Your Company etc.', - 'variables' => '', - 'title' => 'Sms Footer', - ], - [ - 'reference' => 'SmsTransactionFooter', - 'place_holder' => 'Your Company etc.', - 'body' => 'Your Company etc.', - 'variables' => '', - 'title' => 'Sms Footer', - ], - [ - 'reference' => 'SmsResendInformationFooter', - 'place_holder' => 'Your Company etc.', - 'body' => 'Your Company etc.', - 'variables' => '', - 'title' => 'Sms Footer', - ], - ] - ); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/SmsResendInformationKeySeeder.php b/Website/htdocs/mpmanager/database/seeders/SmsResendInformationKeySeeder.php deleted file mode 100644 index b45c56017..000000000 --- a/Website/htdocs/mpmanager/database/seeders/SmsResendInformationKeySeeder.php +++ /dev/null @@ -1,14 +0,0 @@ -table('sms_resend_information_keys')->insert(['key' => 'Resend']); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/SmsVariableDefaultValuesSeeder.php b/Website/htdocs/mpmanager/database/seeders/SmsVariableDefaultValuesSeeder.php deleted file mode 100644 index 1e991bd86..000000000 --- a/Website/htdocs/mpmanager/database/seeders/SmsVariableDefaultValuesSeeder.php +++ /dev/null @@ -1,63 +0,0 @@ -table('sms_variable_default_values')->insert([ - [ - 'variable' => 'name', - 'value' => 'Herbert', - ], - [ - 'variable' => 'surname', - 'value' => 'Kale', - ], - [ - 'variable' => 'amount', - 'value' => '1000', - ], - [ - 'variable' => 'appliance_type_name', - 'value' => 'fridge', - ], - [ - 'variable' => 'remaining', - 'value' => '3', - ], - [ - 'variable' => 'due_date', - 'value' => '2021/04/01', - ], - [ - 'variable' => 'meter', - 'value' => '47782371232', - ], - [ - 'variable' => 'token', - 'value' => '5111 3511 9911 1177 7711', - ], - [ - 'variable' => 'vat_energy', - 'value' => '15', - ], - [ - 'variable' => 'vat_others', - 'value' => '10', - ], - [ - 'variable' => 'energy', - 'value' => '5123.1', - ], [ - 'variable' => 'transaction_amount', - 'value' => '500', - ], - ] - ); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/SubConnectionTypeSeeder.php b/Website/htdocs/mpmanager/database/seeders/SubConnectionTypeSeeder.php deleted file mode 100644 index 88e0c1393..000000000 --- a/Website/htdocs/mpmanager/database/seeders/SubConnectionTypeSeeder.php +++ /dev/null @@ -1,21 +0,0 @@ -table('sub_connection_types')->insert([ - 'name' => 'default sub connection type', - 'tariff_id' => 1, - 'connection_type_id' => 1, - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ]); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/SubMenuItemsSeeder.php b/Website/htdocs/mpmanager/database/seeders/SubMenuItemsSeeder.php deleted file mode 100644 index 21fefcdda..000000000 --- a/Website/htdocs/mpmanager/database/seeders/SubMenuItemsSeeder.php +++ /dev/null @@ -1,56 +0,0 @@ -table('sub_menu_items')->insert([ - [ - 'name' => 'List', - 'url_slug' => '/agents/page/1', - 'parent_id' => '3', - ], - [ - 'name' => 'Commission Types', - 'url_slug' => '/commissions', - 'parent_id' => '3', - ], - [ - 'name' => 'List', - 'url_slug' => '/meters/page/1', - 'parent_id' => '4', - ], - [ - 'name' => 'Types', - 'url_slug' => '/meters/types', - 'parent_id' => '4', - ], - [ - 'name' => 'List', - 'url_slug' => '/tickets', - 'parent_id' => '6', - ], - [ - 'name' => 'Categories', - 'url_slug' => '/tickets/settings/categories', - 'parent_id' => '6', - ], - [ - 'name' => 'Message List', - 'url_slug' => '/sms/list', - 'parent_id' => '10', - ], - [ - 'name' => 'New Message', - 'url_slug' => '/sms/newsms', - 'parent_id' => '10', - ], - ] - ); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/TestSeeder.php b/Website/htdocs/mpmanager/database/seeders/TestSeeder.php new file mode 100644 index 000000000..6b0cd4626 --- /dev/null +++ b/Website/htdocs/mpmanager/database/seeders/TestSeeder.php @@ -0,0 +1,27 @@ +table('mpm_plugins')->insert([ + [ + 'name' => 'BulkRegistration', + 'description' => 'This plugin provides bulk registration of the company\'s existing records. NOTE: Please do not use this plugin to register your Spark & Stemaco meter records. These records will be synchronized automatically once you configure your credential settings for these plugins.', + 'tail_tag' => null, + 'installation_command' => 'bulk-registration:install', + ], + ] + ); + } +} diff --git a/Website/htdocs/mpmanager/database/seeders/TicketSettingsSeeder.php b/Website/htdocs/mpmanager/database/seeders/TicketSettingsSeeder.php deleted file mode 100644 index 96b283cb5..000000000 --- a/Website/htdocs/mpmanager/database/seeders/TicketSettingsSeeder.php +++ /dev/null @@ -1,22 +0,0 @@ -table('ticket_settings')->insert([ - 'name' => 'Trello', - 'api_token' => '----', - 'api_url' => 'https://api.trello.com/1', - 'api_key' => '----', - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), - ]); - } -} diff --git a/Website/htdocs/mpmanager/database/seeders/UsageTypeSeeder.php b/Website/htdocs/mpmanager/database/seeders/UsageTypeSeeder.php deleted file mode 100644 index 187f2f61c..000000000 --- a/Website/htdocs/mpmanager/database/seeders/UsageTypeSeeder.php +++ /dev/null @@ -1,49 +0,0 @@ -table('usage_types')->insert([ - [ - 'name' => 'Mini-Grid', - 'value' => 'mini-grid', - ], - [ - 'name' => 'Solar Home System', - 'value' => 'shs', - ], - [ - 'name' => 'EBike Rental', - 'value' => 'e-bike', - ], - [ - 'name' => 'Mini-Grid & Solar Home System', - 'value' => 'mini-grid&shs', - ], - [ - 'name' => 'Mini-Grid & EBike Rental', - 'value' => 'mini-grid&e-bike', - ], - [ - 'name' => 'Solar Home & EBike Rental', - 'value' => 'shs&e-bike', - ], - [ - 'name' => 'Mini-Grid & Solar Home System & EBike Rental', - 'value' => 'mini-grid&shs&e-bike', - ], - ] - ); - } -} diff --git a/Website/htdocs/mpmanager/database/seeds/SmsBodiesSeeder.php b/Website/htdocs/mpmanager/database/seeds/SmsBodiesSeeder.php deleted file mode 100644 index a717ba3f8..000000000 --- a/Website/htdocs/mpmanager/database/seeds/SmsBodiesSeeder.php +++ /dev/null @@ -1,117 +0,0 @@ -insert([ - [ - 'reference' => 'SmsTransactionHeader', - 'place_holder' => 'Dear [name] [surname], we received your transaction [transaction_amount].', - 'body' => 'Dear [name] [surname], we received your transaction [transaction_amount].', - 'variables' => 'name,surname,transaction_amount', - 'title' => 'Sms Header', - ], - [ - 'reference' => 'SmsReminderHeader', - 'place_holder' => 'Dear [name] [surname],', - 'body' => 'Dear [name] [surname],', - 'variables' => 'name,surname', - 'title' => 'Sms Header', - ], - [ - 'reference' => 'SmsResendInformationHeader', - 'place_holder' => 'Dear [name] [surname], we received your resend last transaction information demand.', - 'body' => 'Dear [name] [surname], we received your resend last transaction information demand.', - 'variables' => 'name,surname', - 'title' => 'Sms Header', - ], - [ - 'reference' => 'EnergyConfirmation', - 'place_holder' => 'Meter: [meter] , [token] Unit [energy] .', - 'body' => 'Meter: [meter] , [token] Unit [energy] .', - 'variables' => 'meter,token,energy', - 'title' => 'Meter Charge', - ], - [ - 'reference' => 'AccessRateConfirmation', - 'place_holder' => 'Service Charge: [amount] ', - 'body' => 'Service Charge: [amount] ', - 'variables' => 'amount', - 'title' => 'Tariff Fixed Cost', - ], - [ - 'reference' => 'AssetRateReminder', - 'place_holder' => 'the next rate of [appliance_type_name] ( . [remaining] . ) is due on [due_date]', - 'body' => 'the next rate of [appliance_type_name] ( . [remaining] . ) is due on [due_date]', - 'variables' => 'appliance_type_name,remaining,due_date', - 'title' => 'Appliance Payment Reminder', - ], - [ - 'reference' => 'AssetRatePayment', - 'place_holder' => 'Appliance: [appliance_type_name] [amount]', - 'body' => 'Appliance: [appliance_type_name] [amount]', - 'variables' => 'appliance_type_name,amount', - 'title' => 'Appliance Payment', - ], - [ - 'reference' => 'OverdueAssetRateReminder', - 'place_holder' => 'you forgot to pay the rate of [appliance_type_name] ( [remaining] ) on [due_date]. Please pay it as soon as possible, unless you wont be able to buy energy.', - 'body' => 'you forgot to pay the rate of [appliance_type_name] ( [remaining] ) on [due_date]. Please pay it as soon as possible, unless you wont be able to buy energy.', - 'variables' => 'appliance_type_name,remaining,due_date', - 'title' => 'Overdue Appliance Payment Reminder', - ], - [ - 'reference' => 'PricingDetails', - 'place_holder' => 'Transaction amount is [amount], \n VAT for energy : [vat_energy] \n VAT for the other staffs : [vat_others] . ', - 'body' => 'Transaction amount is [amount], \n VAT for energy : [vat_energy] \n VAT for the other staffs : [vat_others] . ', - 'variables' => 'amount,vat_energy,vat_others', - 'title' => 'Pricing Details', - ], - [ - 'reference' => 'ResendInformation', - 'place_holder' => 'Meter: [meter] , [token] Unit [energy] KWH. Service Charge: [amount]', - 'body' => 'Meter: [meter] , [token] Unit [energy] KWH. Service Charge: [amount]', - 'variables' => 'meter,token,energy,amount', - 'title' => 'Resend Last Transaction Information', - ], - [ - 'reference' => 'ResendInformationLastTransactionNotFound', - 'place_holder' => 'Last transaction information not found for Meter: [meter]', - 'body' => 'Last transaction information not found for Meter: [meter]', - 'variables' => 'meter', - 'title' => 'Last Transaction Information Not Found', - ], - [ - 'reference' => 'SmsReminderFooter', - 'place_holder' => 'Your Company etc.', - 'body' => 'Your Company etc.', - 'variables' => '', - 'title' => 'Sms Footer', - ], - [ - 'reference' => 'SmsTransactionFooter', - 'place_holder' => 'Your Company etc.', - 'body' => 'Your Company etc.', - 'variables' => '', - 'title' => 'Sms Footer', - ], - [ - 'reference' => 'SmsResendInformationFooter', - 'place_holder' => 'Your Company etc.', - 'body' => 'Your Company etc.', - 'variables' => '', - 'title' => 'Sms Footer', - ], - ] - ); - } -} diff --git a/Website/htdocs/mpmanager/database/seeds/SmsRecendInformationKeySeeder.php b/Website/htdocs/mpmanager/database/seeds/SmsRecendInformationKeySeeder.php deleted file mode 100644 index 07c602050..000000000 --- a/Website/htdocs/mpmanager/database/seeds/SmsRecendInformationKeySeeder.php +++ /dev/null @@ -1,12 +0,0 @@ -insert(['key' => 'Resend']); - } -} diff --git a/Website/htdocs/mpmanager/database/seeds/SmsVariableDefaultValuesSeeder.php b/Website/htdocs/mpmanager/database/seeds/SmsVariableDefaultValuesSeeder.php deleted file mode 100644 index 219fe8b85..000000000 --- a/Website/htdocs/mpmanager/database/seeds/SmsVariableDefaultValuesSeeder.php +++ /dev/null @@ -1,66 +0,0 @@ -insert([ - [ - 'variable' => 'name', - 'value' => 'Herbert', - ], - [ - 'variable' => 'surname', - 'value' => 'Kale', - ], - [ - 'variable' => 'amount', - 'value' => '1000', - ], - [ - 'variable' => 'appliance_type_name', - 'value' => 'fridge', - ], - [ - 'variable' => 'remaining', - 'value' => '3', - ], - [ - 'variable' => 'due_date', - 'value' => '2021/04/01', - ], - [ - 'variable' => 'meter', - 'value' => '47782371232', - ], - [ - 'variable' => 'token', - 'value' => '5111 3511 9911 1177 7711', - ], - [ - 'variable' => 'vat_energy', - 'value' => '15', - ], - [ - 'variable' => 'vat_others', - 'value' => '10', - ], - [ - 'variable' => 'energy', - 'value' => '5123.1', - ], [ - 'variable' => 'transaction_amount', - 'value' => '500', - ], - ] - ); - } -} diff --git a/Website/htdocs/mpmanager/database_creator.sh b/Website/htdocs/mpmanager/database_creator.sh index 06511e9b1..cea337afc 100755 --- a/Website/htdocs/mpmanager/database_creator.sh +++ b/Website/htdocs/mpmanager/database_creator.sh @@ -205,31 +205,6 @@ function createMysqlDbUser() } -# create new folder in migrations folder -function createNewMigrationFolder() -{ - if [ ! -d "${SOURCE_PATH}/database/migrations/$DB_NAME" ]; then - mkdir -p ${SOURCE_PATH}/database/migrations/$DB_NAME - chmod +x ${SOURCE_PATH}/database/migrations/$DB_NAME - fi -} - - -# copy files in micropowermanager folder into new created folder -function copyMigrationFiles() -{ - cp -r ${SOURCE_PATH}/database/migrations/micropowermanager/* ${SOURCE_PATH}/database/migrations/$DB_NAME -} - -# loop through new created folder files and perform sed -function sedMigrationFiles() -{ - for file in ${SOURCE_PATH}/database/migrations/$DB_NAME/* - do - sed -i 's/micropowermanager/shard/g' $file - done -} - ## run migrator command to migrate database function runMigrator() { @@ -268,18 +243,6 @@ function main() createMysqlDbUser echo "Done! " >> ${SOURCE_PATH}/creator.log - echo "Creating migration folder.. " >> ${SOURCE_PATH}/creator.log - createNewMigrationFolder - echo "Done! " >> ${SOURCE_PATH}/creator.log - - echo "Copying migration files.. " >> ${SOURCE_PATH}/creator.log - copyMigrationFiles - echo "Done! " >> ${SOURCE_PATH}/creator.log - - echo "Modifying migration files.. " >> ${SOURCE_PATH}/creator.log - sedMigrationFiles - echo "Done! " >> ${SOURCE_PATH}/creator.log - echo "################################ " >> ${SOURCE_PATH}/creator.log echo "##### Creator Script Ends ###### " >> ${SOURCE_PATH}/creator.log echo "****************************************************************" >> ${SOURCE_PATH}/creator.log diff --git a/Website/htdocs/mpmanager/packages/inensus/angaza-shs/src/Models/AngazaCredential.php b/Website/htdocs/mpmanager/packages/inensus/angaza-shs/src/Models/AngazaCredential.php index 9131e1cea..7665206b3 100644 --- a/Website/htdocs/mpmanager/packages/inensus/angaza-shs/src/Models/AngazaCredential.php +++ b/Website/htdocs/mpmanager/packages/inensus/angaza-shs/src/Models/AngazaCredential.php @@ -2,7 +2,7 @@ namespace Inensus\AngazaSHS\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class AngazaCredential extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/angaza-shs/src/Models/AngazaTransaction.php b/Website/htdocs/mpmanager/packages/inensus/angaza-shs/src/Models/AngazaTransaction.php index 8ebfe4c39..7c6de08ea 100644 --- a/Website/htdocs/mpmanager/packages/inensus/angaza-shs/src/Models/AngazaTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/angaza-shs/src/Models/AngazaTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\AngazaSHS\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class AngazaTransaction extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/bulk-registration/src/Models/CsvData.php b/Website/htdocs/mpmanager/packages/inensus/bulk-registration/src/Models/CsvData.php index d3ce15bea..6e58bb289 100644 --- a/Website/htdocs/mpmanager/packages/inensus/bulk-registration/src/Models/CsvData.php +++ b/Website/htdocs/mpmanager/packages/inensus/bulk-registration/src/Models/CsvData.php @@ -2,7 +2,7 @@ namespace Inensus\BulkRegistration\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class CsvData extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/calin-meter/src/Models/CalinCredential.php b/Website/htdocs/mpmanager/packages/inensus/calin-meter/src/Models/CalinCredential.php index 700c176a0..66bfcf98d 100644 --- a/Website/htdocs/mpmanager/packages/inensus/calin-meter/src/Models/CalinCredential.php +++ b/Website/htdocs/mpmanager/packages/inensus/calin-meter/src/Models/CalinCredential.php @@ -2,7 +2,7 @@ namespace Inensus\CalinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class CalinCredential extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/calin-meter/src/Models/CalinTransaction.php b/Website/htdocs/mpmanager/packages/inensus/calin-meter/src/Models/CalinTransaction.php index fd084da82..8f71256f1 100644 --- a/Website/htdocs/mpmanager/packages/inensus/calin-meter/src/Models/CalinTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/calin-meter/src/Models/CalinTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\CalinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Transaction\AgentTransaction; use App\Models\Transaction\AirtelTransaction; use App\Models\Transaction\ISubTransaction; diff --git a/Website/htdocs/mpmanager/packages/inensus/calin-smart-meter/src/Models/CalinSmartCredential.php b/Website/htdocs/mpmanager/packages/inensus/calin-smart-meter/src/Models/CalinSmartCredential.php index 93381cdbd..6dadaea7d 100644 --- a/Website/htdocs/mpmanager/packages/inensus/calin-smart-meter/src/Models/CalinSmartCredential.php +++ b/Website/htdocs/mpmanager/packages/inensus/calin-smart-meter/src/Models/CalinSmartCredential.php @@ -2,7 +2,7 @@ namespace Inensus\CalinSmartMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class CalinSmartCredential extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/calin-smart-meter/src/Models/CalinSmartTransaction.php b/Website/htdocs/mpmanager/packages/inensus/calin-smart-meter/src/Models/CalinSmartTransaction.php index 66c895a1a..bfbb9ce5d 100644 --- a/Website/htdocs/mpmanager/packages/inensus/calin-smart-meter/src/Models/CalinSmartTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/calin-smart-meter/src/Models/CalinSmartTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\CalinSmartMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Transaction\AgentTransaction; use App\Models\Transaction\AirtelTransaction; use App\Models\Transaction\ISubTransaction; diff --git a/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsCredential.php b/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsCredential.php index 519a3a010..bc90110ec 100644 --- a/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsCredential.php +++ b/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsCredential.php @@ -2,7 +2,7 @@ namespace Inensus\DalyBms\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class DalyBmsCredential extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsDevice.php b/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsDevice.php index 052d556e8..8a00d2ab5 100644 --- a/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsDevice.php +++ b/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsDevice.php @@ -2,7 +2,7 @@ namespace Inensus\DalyBms\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class DalyBmsDevice extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsTransaction.php b/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsTransaction.php index 3b148b699..c02f10391 100644 --- a/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/daly-bms/src/Models/DalyBmsTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\DalyBms\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class DalyBmsTransaction extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongCredential.php b/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongCredential.php index a87e9008a..b395dd484 100644 --- a/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongCredential.php +++ b/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongCredential.php @@ -2,7 +2,7 @@ namespace Inensus\GomeLongMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class GomeLongCredential extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongTariff.php b/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongTariff.php index fa381dfd3..56f6d0d24 100644 --- a/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongTariff.php +++ b/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongTariff.php @@ -2,7 +2,7 @@ namespace Inensus\GomeLongMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Meter\MeterTariff; class GomeLongTariff extends BaseModel diff --git a/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongTransaction.php b/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongTransaction.php index cbbacd5be..85cdb399f 100644 --- a/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/gome-long-meter/src/Models/GomeLongTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\GomeLongMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class GomeLongTransaction extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinCredential.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinCredential.php index bbf052130..0a04bf263 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinCredential.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinCredential.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class KelinCredential extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinCustomer.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinCustomer.php index 83cf41395..769fca357 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinCustomer.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinCustomer.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Person\Person; class KelinCustomer extends BaseModel diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeter.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeter.php index 4210bf4df..92821bdc4 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeter.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeter.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Meter\Meter; class KelinMeter extends BaseModel diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterConsumption.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterConsumption.php index e8dcca668..d67028cdf 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterConsumption.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterConsumption.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Meter\Meter; class KelinMeterConsumption extends BaseModel diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterDailyData.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterDailyData.php index 9c3bacbc6..f5742487d 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterDailyData.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterDailyData.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class KelinMeterDailyData extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterMinutelyData.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterMinutelyData.php index 3e1b62bb3..9acc94d13 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterMinutelyData.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinMeterMinutelyData.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class KelinMeterMinutelyData extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSetting.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSetting.php index ebbe4a05d..8f0ff2689 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSetting.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSetting.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use Illuminate\Database\Eloquent\Relations\MorphTo; class KelinSetting extends BaseModel diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSyncAction.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSyncAction.php index 516f0a67c..fdfd78d8a 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSyncAction.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSyncAction.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class KelinSyncAction extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSyncSetting.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSyncSetting.php index 5e1219ba0..6b80cdebb 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSyncSetting.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinSyncSetting.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class KelinSyncSetting extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinTransaction.php b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinTransaction.php index 5652d24ce..807e2a83d 100644 --- a/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/kelin-meter/src/Models/KelinTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\KelinMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Transaction\AgentTransaction; use App\Models\Transaction\AirtelTransaction; use App\Models\Transaction\ISubTransaction; diff --git a/Website/htdocs/mpmanager/packages/inensus/mesomb-payment-provider/src/Models/BaseModel.php b/Website/htdocs/mpmanager/packages/inensus/mesomb-payment-provider/src/Models/BaseModel.php index 7b41b253d..c83529006 100644 --- a/Website/htdocs/mpmanager/packages/inensus/mesomb-payment-provider/src/Models/BaseModel.php +++ b/Website/htdocs/mpmanager/packages/inensus/mesomb-payment-provider/src/Models/BaseModel.php @@ -1,12 +1,5 @@ $miniGrid->id, 'hash' => $site['hash'], ]); - $this->updateGeographicalInformation($miniGrid->id, $site); + $this->createOrUpdateGeographicalInformation($miniGrid->id, $site); }); $syncCheck['data']->filter(function ($value) { @@ -83,7 +83,7 @@ public function sync() })->each(function ($site) { $miniGrid = is_null($site['relatedMiniGrid']) ? $this->creteRelatedMiniGrid($site) : $this->updateRelatedMiniGrid($site, $site['relatedMiniGrid']); - $this->updateGeographicalInformation($miniGrid->id, $site); + $this->createOrUpdateGeographicalInformation($miniGrid->id, $site); $site['registeredStmSite']->update([ 'site_id' => $site['id'], 'mpm_mini_grid_id' => $miniGrid->id, @@ -176,7 +176,7 @@ public function updateRelatedMiniGrid($site, $miniGrid) return $miniGrid->fresh(); } - public function updateGeographicalInformation($miniGridId, $site) + public function createOrUpdateGeographicalInformation($miniGridId, $site) { $geographicalInformation = $this->geographicalInformation->newQuery()->whereHasMorph( 'owner', @@ -187,9 +187,18 @@ static function ($q) use ($miniGridId) { )->first(); $points = $site['latitude'] === null ? config('steama.geoLocation') : $site['latitude'].','.$site['longitude']; - $geographicalInformation->update([ - 'points' => $points, - ]); + + if ($geographicalInformation) { + $geographicalInformation->update([ + 'points' => $points, + ]); + } else { + $this->geographicalInformation->create([ + 'owner_type' => 'mini-grid', + 'owner_id' => $miniGridId, + 'points' => $points, + ]); + } } public function checkLocationAvailability() diff --git a/Website/htdocs/mpmanager/packages/inensus/stron-meter/src/Models/StronCredential.php b/Website/htdocs/mpmanager/packages/inensus/stron-meter/src/Models/StronCredential.php index c8b658f06..244ecdce5 100644 --- a/Website/htdocs/mpmanager/packages/inensus/stron-meter/src/Models/StronCredential.php +++ b/Website/htdocs/mpmanager/packages/inensus/stron-meter/src/Models/StronCredential.php @@ -2,7 +2,7 @@ namespace Inensus\StronMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class StronCredential extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/stron-meter/src/Models/StronTransaction.php b/Website/htdocs/mpmanager/packages/inensus/stron-meter/src/Models/StronTransaction.php index b16c968f7..06691f172 100644 --- a/Website/htdocs/mpmanager/packages/inensus/stron-meter/src/Models/StronTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/stron-meter/src/Models/StronTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\StronMeter\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Transaction\AgentTransaction; use App\Models\Transaction\AirtelTransaction; use App\Models\Transaction\ISubTransaction; diff --git a/Website/htdocs/mpmanager/packages/inensus/sun-king-shs/src/Models/SunKingCredential.php b/Website/htdocs/mpmanager/packages/inensus/sun-king-shs/src/Models/SunKingCredential.php index a9fae9801..bcda551a3 100644 --- a/Website/htdocs/mpmanager/packages/inensus/sun-king-shs/src/Models/SunKingCredential.php +++ b/Website/htdocs/mpmanager/packages/inensus/sun-king-shs/src/Models/SunKingCredential.php @@ -2,7 +2,7 @@ namespace Inensus\SunKingSHS\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class SunKingCredential extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/sun-king-shs/src/Models/SunKingTransaction.php b/Website/htdocs/mpmanager/packages/inensus/sun-king-shs/src/Models/SunKingTransaction.php index 7fc4c39b6..9451bb065 100644 --- a/Website/htdocs/mpmanager/packages/inensus/sun-king-shs/src/Models/SunKingTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/sun-king-shs/src/Models/SunKingTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\SunKingSHS\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class SunKingTransaction extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Models/SwiftaAuthentication.php b/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Models/SwiftaAuthentication.php index 50f7545a7..90fe117e3 100644 --- a/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Models/SwiftaAuthentication.php +++ b/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Models/SwiftaAuthentication.php @@ -2,7 +2,7 @@ namespace Inensus\SwiftaPaymentProvider\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; class SwiftaAuthentication extends BaseModel { diff --git a/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Models/SwiftaTransaction.php b/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Models/SwiftaTransaction.php index 7f33beac5..4fd09e6f7 100644 --- a/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Models/SwiftaTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Models/SwiftaTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\SwiftaPaymentProvider\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Transaction\IRawTransaction; use App\Models\Transaction\Transaction; use App\Models\Transaction\TransactionConflicts; diff --git a/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Services/SwiftaTransactionService.php b/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Services/SwiftaTransactionService.php index 2130b32ae..85970670c 100644 --- a/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Services/SwiftaTransactionService.php +++ b/Website/htdocs/mpmanager/packages/inensus/swifta-payment-provider/src/Services/SwiftaTransactionService.php @@ -8,11 +8,16 @@ use App\Models\Transaction\Transaction; use App\Models\Transaction\TransactionConflicts; use App\Services\AbstractPaymentAggregatorTransactionService; -use App\Services\IBaseService; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\Log; use Inensus\SwiftaPaymentProvider\Models\SwiftaTransaction; +/** + * @implements IBaseService + */ class SwiftaTransactionService extends AbstractPaymentAggregatorTransactionService implements IBaseService { public function __construct( @@ -77,12 +82,12 @@ public function checkAmountIsSame($amount, $transaction) } } - public function getById($id) + public function getById(?int $id): SwiftaTransaction { return $this->swiftaTransaction->newQuery()->find($id); } - public function update($swiftaTransaction, $swiftaTransactionData) + public function update($swiftaTransaction, $swiftaTransactionData): SwiftaTransaction { $swiftaTransaction->update($swiftaTransactionData); $swiftaTransaction->fresh(); @@ -90,17 +95,17 @@ public function update($swiftaTransaction, $swiftaTransactionData) return $swiftaTransaction; } - public function create($swiftaTransactionData) + public function create(array $swiftaTransactionData): SwiftaTransaction { return $this->swiftaTransaction->newQuery()->create($swiftaTransactionData); } - public function delete($swiftaTransaction) + public function delete($swiftaTransaction): ?bool { return $swiftaTransaction->delete(); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { $query = $this->swiftaTransaction->newQuery(); diff --git a/Website/htdocs/mpmanager/packages/inensus/ticket/config/tickets.php b/Website/htdocs/mpmanager/packages/inensus/ticket/config/tickets.php index b80602450..ef452cd80 100644 --- a/Website/htdocs/mpmanager/packages/inensus/ticket/config/tickets.php +++ b/Website/htdocs/mpmanager/packages/inensus/ticket/config/tickets.php @@ -1,10 +1,4 @@ [ diff --git a/Website/htdocs/mpmanager/packages/inensus/ticket/database/migrations/create_ticketing_tables.php.stub b/Website/htdocs/mpmanager/packages/inensus/ticket/database/migrations/create_ticketing_tables.php.stub index 99fcfedd4..1087ecb7b 100644 --- a/Website/htdocs/mpmanager/packages/inensus/ticket/database/migrations/create_ticketing_tables.php.stub +++ b/Website/htdocs/mpmanager/packages/inensus/ticket/database/migrations/create_ticketing_tables.php.stub @@ -4,13 +4,6 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; - -/** - * Created by PhpStorm. - * User: kemal - * Date: 23.08.18 - * Time: 10:39 - */ class CreateTicketingTables extends Migration { diff --git a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Exceptions/ApiUserNotFound.php b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Exceptions/ApiUserNotFound.php index 4b2cc2fa4..081ae012e 100644 --- a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Exceptions/ApiUserNotFound.php +++ b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Exceptions/ApiUserNotFound.php @@ -1,10 +1,4 @@ + */ class TicketCategoryService implements IBaseService { - public function __construct(private TicketCategory $ticketCategory) - { + public function __construct( + private TicketCategory $ticketCategory + ) { } - public function getById($categoryId) + public function getById(int $categoryId): TicketCategory { return $this->ticketCategory->newQuery()->find($categoryId); } - public function create($ticketCategoryData) + public function create(array $ticketCategoryData): TicketCategory { return $this->ticketCategory->newQuery()->create($ticketCategoryData); } - public function update($model, $data) + public function update($model, array $data): TicketCategory { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null, $outsource = null) + public function getAll(?int $limit = null, ?bool $outsource = null): Collection|LengthAwarePaginator { $ticketCategories = $this->ticketCategory->newQuery(); diff --git a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketCommentService.php b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketCommentService.php index 4e14d1f30..20fae6e86 100644 --- a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketCommentService.php +++ b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketCommentService.php @@ -1,10 +1,4 @@ + */ class TicketOutSourceService implements IBaseService { - public function __construct(private TicketOutsource $ticketOutsource) - { + public function __construct( + private TicketOutsource $ticketOutsource + ) { } - public function getById($ticketOutsourceId) + public function getById(int $ticketOutsourceId): TicketOutsource { - $this->ticketOutsource->newQuery()->find($ticketOutsourceId); + return $this->ticketOutsource->newQuery()->find($ticketOutsourceId); } - public function create($ticketOutsourceData) + public function create(array $ticketOutsourceData): TicketOutsource { return $this->ticketOutsource->newQuery()->create($ticketOutsourceData); } - public function update($model, $data) + public function update($model, array $data): TicketOutsource { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketOutsourceReportService.php b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketOutsourceReportService.php index 4f06e00d2..daa71de3a 100644 --- a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketOutsourceReportService.php +++ b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketOutsourceReportService.php @@ -2,12 +2,17 @@ namespace Inensus\Ticket\Services; -use App\Services\IBaseService; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; use Inensus\Ticket\Models\TicketOutsourceReport; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Exception; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; +/** + * @implements IBaseService + */ class TicketOutsourceReportService implements IBaseService { public function __construct( @@ -16,7 +21,7 @@ public function __construct( { } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { if ($limit) { return $this->ticketOutsourceReport->newQuery()->paginate($limit); @@ -58,23 +63,23 @@ public function createExcelSheet($startDate, $endDate, $tickets) return $fileName; } - public function create($ticketOutsourceReportData) + public function create(array $ticketOutsourceReportData): TicketOutsourceReport { return $this->ticketOutsourceReport->newQuery()->create($ticketOutsourceReportData); } - public function getById($outsourceReportId) + public function getById(int $outsourceReportId): TicketOutsourceReport { return $this->ticketOutsourceReport->newQuery()->find($outsourceReportId); } - public function update($model, $data) + public function update($model, array $data): TicketOutsourceReport { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketService.php b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketService.php index 5c48546cd..8293989f6 100644 --- a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketService.php +++ b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketService.php @@ -3,14 +3,18 @@ namespace Inensus\Ticket\Services; use App\Models\Agent; -use App\Services\IAssociative; +use App\Services\Interfaces\IAssociative; use Illuminate\Database\Eloquent\Collection; use Inensus\Ticket\Models\Ticket; +/** + * @implements IAssociative + */ class TicketService implements IAssociative { - public function __construct(private Ticket $ticket) - { + public function __construct( + private Ticket $ticket + ) { } public function create( @@ -116,12 +120,12 @@ static function ($q) use ($agentId) { return $tickets; } - public function make($ticketData) + public function make(array $ticketData): Ticket { return $this->ticket->newQuery()->make($ticketData); } - public function save($ticket) + public function save($ticket): bool { return $ticket->save(); } diff --git a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketUserService.php b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketUserService.php index d905ce411..14f6c8153 100644 --- a/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketUserService.php +++ b/Website/htdocs/mpmanager/packages/inensus/ticket/src/Services/TicketUserService.php @@ -1,17 +1,16 @@ + */ class TicketUserService implements IBaseService { public function __construct( @@ -20,7 +19,7 @@ public function __construct( ) { } - public function getAll($limit = null, $outsource = null) + public function getAll(?int $limit = null, ?bool $outsource = null): Collection|LengthAwarePaginator { $ticketUsers = $this->user::with('relationTicketUser'); @@ -35,24 +34,24 @@ public function getAll($limit = null, $outsource = null) return $ticketUsers->get(); } - public function getById($externId) + public function getById(int $externId): TicketUser { return $this->ticketUser->newQuery()->where('extern_id', $externId)->first(); } - public function create($ticketUserData) + public function create($ticketUserData): TicketUser { return $this->ticketUser->newQuery()->create($ticketUserData); } - public function update($model, $data) + public function update($model, array $data): TicketUser { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } public function findByPhone(string $phone): TicketUser diff --git a/Website/htdocs/mpmanager/packages/inensus/ticket/src/routes/api.php b/Website/htdocs/mpmanager/packages/inensus/ticket/src/routes/api.php index e29d578cc..40bd5b3e6 100644 --- a/Website/htdocs/mpmanager/packages/inensus/ticket/src/routes/api.php +++ b/Website/htdocs/mpmanager/packages/inensus/ticket/src/routes/api.php @@ -1,10 +1,4 @@ + */ class ViberContactService implements IBaseService { - public function __construct(private ViberContact $viberContact, private Person $person) - { + public function __construct( + private ViberContact $viberContact, private Person $person + ) { } public function createContact($personId, $viberId) @@ -19,29 +24,29 @@ public function createContact($personId, $viberId) ]); } - public function getById($id) + public function getById(int $id): ViberContact { return $this->viberContact->newQuery()->find($id); } - public function create($data) + public function create(array $data): ViberContact { return $this->viberContact->newQuery()->create($data); } - public function update($model, $data) + public function update($model, array $data): ViberContact { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } public function getByReceiverPhoneNumber($receiver) diff --git a/Website/htdocs/mpmanager/packages/inensus/viber-messaging/src/Services/ViberMessageService.php b/Website/htdocs/mpmanager/packages/inensus/viber-messaging/src/Services/ViberMessageService.php index 3dbd7f52a..a0accf7d4 100644 --- a/Website/htdocs/mpmanager/packages/inensus/viber-messaging/src/Services/ViberMessageService.php +++ b/Website/htdocs/mpmanager/packages/inensus/viber-messaging/src/Services/ViberMessageService.php @@ -2,37 +2,42 @@ namespace Inensus\ViberMessaging\Services; -use App\Services\IBaseService; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; use Inensus\ViberMessaging\Models\ViberMessage; +/** + * @implements IBaseService + */ class ViberMessageService implements IBaseService { - public function __construct(private ViberMessage $viberMessage) - { + public function __construct( + private ViberMessage $viberMessage + ) { } - public function getById($id) + public function getById(int $id): ViberMessage { - // TODO: Implement getById() method. + throw new \Exception('Method getById() not yet implemented.'); } - public function create($data) + public function create(array $data): ViberMessage { return $this->viberMessage->newQuery()->create($data); } - public function update($model, $data) + public function update($model, array $data): ViberMessage { - // TODO: Implement update() method. + throw new \Exception('Method update() not yet implemented.'); } - public function delete($model) + public function delete($model): ?bool { - // TODO: Implement delete() method. + throw new \Exception('Method delete() not yet implemented.'); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection { - // TODO: Implement getAll() method. + throw new \Exception('Method getAll() not yet implemented.'); } } diff --git a/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Models/WaveMoneyCredential.php b/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Models/WaveMoneyCredential.php index faf3f1581..87bf61186 100644 --- a/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Models/WaveMoneyCredential.php +++ b/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Models/WaveMoneyCredential.php @@ -2,7 +2,7 @@ namespace Inensus\WaveMoneyPaymentProvider\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; /** * @property string merchant_id diff --git a/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Models/WaveMoneyTransaction.php b/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Models/WaveMoneyTransaction.php index 710bbc800..92d204f8c 100644 --- a/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Models/WaveMoneyTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Models/WaveMoneyTransaction.php @@ -2,7 +2,7 @@ namespace Inensus\WaveMoneyPaymentProvider\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Transaction\IRawTransaction; use App\Models\Transaction\Transaction; use App\Models\Transaction\TransactionConflicts; diff --git a/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Modules/Transaction/WaveMoneyTransactionService.php b/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Modules/Transaction/WaveMoneyTransactionService.php index c41e3bec2..03e4b487e 100644 --- a/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Modules/Transaction/WaveMoneyTransactionService.php +++ b/Website/htdocs/mpmanager/packages/inensus/wave-money-payment-provider/src/Modules/Transaction/WaveMoneyTransactionService.php @@ -9,10 +9,16 @@ use App\Models\Meter\MeterParameter; use App\Models\Transaction\Transaction; use App\Services\AbstractPaymentAggregatorTransactionService; -use App\Services\IBaseService; +use App\Services\Interfaces\IBaseService; +use Illuminate\Database\Eloquent\Collection; +use Illuminate\Pagination\LengthAwarePaginator; +use Inensus\WavecomPaymentProvider\Models\WaveComTransaction; use Inensus\WaveMoneyPaymentProvider\Models\WaveMoneyTransaction; use Ramsey\Uuid\Uuid; +/** + * @implements IBaseService + */ class WaveMoneyTransactionService extends AbstractPaymentAggregatorTransactionService implements IBaseService { private Meter $meter; @@ -77,12 +83,12 @@ public function getByStatus($status) ->get(); } - public function getById($id) + public function getById(int $id): WaveComTransaction { return $this->waveMoneyTransaction->newQuery()->find($id); } - public function update($waveMoneyTransaction, $waveMoneyTransactionData) + public function update($waveMoneyTransaction, array $waveMoneyTransactionData): WaveMoneyTransaction { $waveMoneyTransaction->update($waveMoneyTransactionData); $waveMoneyTransaction->fresh(); @@ -90,17 +96,17 @@ public function update($waveMoneyTransaction, $waveMoneyTransactionData) return $waveMoneyTransaction; } - public function create($waveMoneyTransactionData) + public function create($waveMoneyTransactionData): WaveMoneyTransaction { return $this->waveMoneyTransaction->newQuery()->create($waveMoneyTransactionData); } - public function delete($waveMoneyTransaction) + public function delete($waveMoneyTransaction): ?bool { return $waveMoneyTransaction->delete(); } - public function getAll($limit = null) + public function getAll(?int $limit = null): Collection|LengthAwarePaginator { $query = $this->waveMoneyTransaction->newQuery(); diff --git a/Website/htdocs/mpmanager/packages/inensus/wavecom-payment-provider/src/Models/WaveComTransaction.php b/Website/htdocs/mpmanager/packages/inensus/wavecom-payment-provider/src/Models/WaveComTransaction.php index 2a3d5e414..685735003 100644 --- a/Website/htdocs/mpmanager/packages/inensus/wavecom-payment-provider/src/Models/WaveComTransaction.php +++ b/Website/htdocs/mpmanager/packages/inensus/wavecom-payment-provider/src/Models/WaveComTransaction.php @@ -4,7 +4,7 @@ namespace Inensus\WavecomPaymentProvider\Models; -use App\Models\BaseModel; +use App\Models\Base\BaseModel; use App\Models\Transaction\IRawTransaction; use App\Models\Transaction\Transaction; use App\Models\Transaction\TransactionConflicts; diff --git a/Website/htdocs/mpmanager/phpstan.neon b/Website/htdocs/mpmanager/phpstan.neon index e69de29bb..92b603cd0 100644 --- a/Website/htdocs/mpmanager/phpstan.neon +++ b/Website/htdocs/mpmanager/phpstan.neon @@ -0,0 +1,18 @@ +includes: + - vendor/larastan/larastan/extension.neon + +parameters: + + paths: + - app/ + + # Level 9 is the highest level + level: 1 + +# ignoreErrors: +# - '#PHPDoc tag @var#' +# +# excludePaths: +# - ./*/*/FileToBeExcluded.php +# +# checkMissingIterableValueType: false diff --git a/Website/htdocs/mpmanager/routes/api.php b/Website/htdocs/mpmanager/routes/api.php index f01c89bd5..89e81dc20 100644 --- a/Website/htdocs/mpmanager/routes/api.php +++ b/Website/htdocs/mpmanager/routes/api.php @@ -218,7 +218,6 @@ Route::put('/mail/{mailSettings}', ['uses' => 'MailSettingsController@update', 'middleware' => 'jwt.verify']); Route::get('/currency-list', 'CurrencyController@index'); Route::get('/country-list', 'CountryListController@index'); - Route::get('/languages-list', 'LanguageController@index'); }); // Sms Route::group(['prefix' => 'sms-body'], static function () { diff --git a/Website/htdocs/mpmanager/routes/resources/Addresses.php b/Website/htdocs/mpmanager/routes/resources/Addresses.php index 6f34ed742..d9ab20eb5 100644 --- a/Website/htdocs/mpmanager/routes/resources/Addresses.php +++ b/Website/htdocs/mpmanager/routes/resources/Addresses.php @@ -1,10 +1,4 @@ - - - - - - MicroPowerManager - - - - - -
- - + + + + + + MicroPowerManager + + + + + +
+ + diff --git a/Website/ui/src/App.vue b/Website/ui/src/App.vue index 063d1f0f2..4e2ce8ffe 100644 --- a/Website/ui/src/App.vue +++ b/Website/ui/src/App.vue @@ -1,36 +1,33 @@ diff --git a/Website/ui/src/ExportedRoutes.js b/Website/ui/src/ExportedRoutes.js index 0d1ac1ce0..6ef61a175 100644 --- a/Website/ui/src/ExportedRoutes.js +++ b/Website/ui/src/ExportedRoutes.js @@ -1,1380 +1,1388 @@ -import LoginHeader from '@/modules/Login/LoginHeader' -import LoginFooter from '@/modules/Login/LoginFooter' -import Welcome from './pages/Welcome/index.vue' -import Login from './pages/Login/index.vue' -import Register from './pages/Register/index.vue' -import ForgotPassword from './pages/ForgotPassword/index.vue' +import LoginHeader from "@/modules/Login/LoginHeader" +import LoginFooter from "@/modules/Login/LoginFooter" +import Welcome from "./pages/Welcome/index.vue" +import Login from "./pages/Login/index.vue" +import Register from "./pages/Register/index.vue" +import ForgotPassword from "./pages/ForgotPassword/index.vue" -import ChildRouteWrapper from './shared/ChildRouteWrapper.vue' +import ChildRouteWrapper from "./shared/ChildRouteWrapper.vue" -import ClusterOverviewPage from './pages/Dashboard/index.vue' -import ClusterDetailPage from './pages/Dashboard/Cluster/_id.vue' +import ClusterOverviewPage from "./pages/Dashboard/index.vue" +import ClusterDetailPage from "./pages/Dashboard/Cluster/_id.vue" // MiniGridOverviewPage just redirects to MiniGridDetailPage for first Mini-Grid -import MiniGridOverviewPage from './pages/Dashboard/MiniGrid/index.vue' -import MiniGridDetailPage from './pages/Dashboard/MiniGrid/_id.vue' -import AddCluster from './pages/Location/Cluster/New/index.vue' -import AddVillage from './pages/Location/Village/New/index.vue' -import AddMiniGrid from './pages/Location/MiniGrid/New/index.vue' -import Settings from './pages/Settings/index.vue' -import Profile from './pages/Profile/index.vue' -import ProfileManagement from './pages/Profile/Management/index.vue' -import Reports from './pages/Report/index.vue' +import MiniGridOverviewPage from "./pages/Dashboard/MiniGrid/index.vue" +import MiniGridDetailPage from "./pages/Dashboard/MiniGrid/_id.vue" +import AddCluster from "./pages/Location/Cluster/New/index.vue" +import AddVillage from "./pages/Location/Village/New/index.vue" +import AddMiniGrid from "./pages/Location/MiniGrid/New/index.vue" +import Settings from "./pages/Settings/index.vue" +import Profile from "./pages/Profile/index.vue" +import ProfileManagement from "./pages/Profile/Management/index.vue" +import Reports from "./pages/Report/index.vue" // FIXME: https://github.com/EnAccess/micropowermanager/issues/143 -import CustomerList from './pages/Client/index.vue' -import CustomerDetail from './pages/Client/_id.vue' -import TransactionList from './pages/Transaction/index.vue' -import TransactionSearch from './pages/Client/_id.vue' -import TransactionDetail from './pages/Client/_id.vue' -import TicketList from './pages/Ticket/index.vue' -import TicketSettingsUsers from './pages/Ticket/Setting/User/index.vue' -import TicketSettingsCategories from './pages/Ticket/Setting/Category/index.vue' -import TariffList from './pages/Tariff/index.vue' -import TariffDetail from './pages/Tariff/_id.vue' -import MeterList from './pages/Meter/index.vue' -import MeterDetail from './pages/Meter/_id.vue' -import MeterTypeList from './pages/MeterType/index.vue' -import SolarHomeSystem from './pages/SolarHomeSystem/index.vue' -import TargetList from './pages/Target/index.vue' -import TargetNew from './pages/Target/New/index.vue' -import ConnectionTypeList from './pages/Connection/Type/index.vue' -import ConnectionTypeDetail from './pages/Connection/Type/_id.vue' -import ConnectionTypeNew from './pages/Connection/Type/New/index.vue' -import ConnectionGroupList from './pages/Connection/Group/index.vue' -import MessageList from './pages/Sms/index.vue' -import MessageNew from './pages/Sms/New/index.vue' -import Maintenance from './pages/Maintenance/index.vue' -import ApplianceList from './pages/Appliance/index.vue' -import AgentList from './pages/Agent/index.vue' -import AgentCommissionTypeList from './pages/Agent/Commission/index.vue' -import AgentDetail from './pages/Agent/_id.vue' -import SoldApplianceDetail from './pages/Client/Appliance/_id.vue' +import CustomerList from "./pages/Client/index.vue" +import CustomerDetail from "./pages/Client/_id.vue" +import TransactionList from "./pages/Transaction/index.vue" +import TransactionSearch from "./pages/Client/_id.vue" +import TransactionDetail from "./pages/Client/_id.vue" +import TicketList from "./pages/Ticket/index.vue" +import TicketSettingsUsers from "./pages/Ticket/Setting/User/index.vue" +import TicketSettingsCategories from "./pages/Ticket/Setting/Category/index.vue" +import TariffList from "./pages/Tariff/index.vue" +import TariffDetail from "./pages/Tariff/_id.vue" +import MeterList from "./pages/Meter/index.vue" +import MeterDetail from "./pages/Meter/_id.vue" +import MeterTypeList from "./pages/MeterType/index.vue" +import SolarHomeSystem from "./pages/SolarHomeSystem/index.vue" +import TargetList from "./pages/Target/index.vue" +import TargetNew from "./pages/Target/New/index.vue" +import ConnectionTypeList from "./pages/Connection/Type/index.vue" +import ConnectionTypeDetail from "./pages/Connection/Type/_id.vue" +import ConnectionTypeNew from "./pages/Connection/Type/New/index.vue" +import ConnectionGroupList from "./pages/Connection/Group/index.vue" +import MessageList from "./pages/Sms/index.vue" +import MessageNew from "./pages/Sms/New/index.vue" +import Maintenance from "./pages/Maintenance/index.vue" +import ApplianceList from "./pages/Appliance/index.vue" +import AgentList from "./pages/Agent/index.vue" +import AgentCommissionTypeList from "./pages/Agent/Commission/index.vue" +import AgentDetail from "./pages/Agent/_id.vue" +import SoldApplianceDetail from "./pages/Client/Appliance/_id.vue" // Former plugins -import CalinMeterOverview from './plugins/calin-meter/js/modules/Overview/Overview' -import CalinSmartMeterOverview from './plugins/calin-smart-meter/js/modules/Overview/Overview' -import KelinMeterOverview from './plugins/kelin-meter/js/modules/Overview/Overview' -import KelinMeterCustomerList from './plugins/kelin-meter/js/modules/Customer/List' -import KelinMeterSettings from './plugins/kelin-meter/js/modules/Setting/Setting' -import KelinMeterList from './plugins/kelin-meter/js/modules/Meter/List' -import KelinMeterStatus from './plugins/kelin-meter/js/modules/Meter/Status' -import KelinMeterConsumptionDaily from './plugins/kelin-meter/js/modules/Meter/Consumption/Daily' -import KelinMeterConsumptionMinutely from './plugins/kelin-meter/js/modules/Meter/Consumption/Minutely' -import SparkMeterSiteList from './plugins/spark-meter/js/modules/Site/SiteList' -import SparkMeterModelList from './plugins/spark-meter/js/modules/MeterModel/MeterModelList' -import SparkMeterCustomerList from './plugins/spark-meter/js/modules/Customer/CustomerList' -import SparkMeterTariffList from './plugins/spark-meter/js/modules/Tariff/TariffList' -import SparkMeterTariffDetail from './plugins/spark-meter/js/modules/Tariff/TariffDetail' -import SparkMeterOverview from './plugins/spark-meter/js/modules/Overview/Overview' -import SparkMeterSalesAccountList from './plugins/spark-meter/js/modules/SalesAccount/SalesAccountList' -import SparkMeterSettings from './plugins/spark-meter/js/modules/Setting/Setting' -import SteamaCoOverview from './plugins/steama-meter/js/modules/Overview/Overview' -import SteamaCoSiteList from './plugins/steama-meter/js/modules/Site/SiteList' -import SteamaCoCustomerList from './plugins/steama-meter/js/modules/Customer/CustomerList' -import SteamaCoCustomerDetail from './plugins/steama-meter/js/modules/Customer/CustomerMovements' -import SteamaCoMeterList from './plugins/steama-meter/js/modules/Meter/MeterList' -import SteamaCoAgentList from './plugins/steama-meter/js/modules/Agent/AgentList' -import SteamaCoSettings from './plugins/steama-meter/js/modules/Setting/Setting' -import StronMeterOverview from './plugins/stron-meter/js/modules/Overview/Overview' -import BulkRegistrationCsv from './plugins/bulk-registration/js/modules/Csv' -import ViberMessagingOverview from './plugins/viber-messaging/js/modules/Overview/Overview' -import WaveMoneyOverview from './plugins/wave-money-payment-provider/js/modules/Overview/Overview' +import CalinMeterOverview from "./plugins/calin-meter/js/modules/Overview/Overview" +import CalinSmartMeterOverview from "./plugins/calin-smart-meter/js/modules/Overview/Overview" +import KelinMeterOverview from "./plugins/kelin-meter/js/modules/Overview/Overview" +import KelinMeterCustomerList from "./plugins/kelin-meter/js/modules/Customer/List" +import KelinMeterSettings from "./plugins/kelin-meter/js/modules/Setting/Setting" +import KelinMeterList from "./plugins/kelin-meter/js/modules/Meter/List" +import KelinMeterStatus from "./plugins/kelin-meter/js/modules/Meter/Status" +import KelinMeterConsumptionDaily from "./plugins/kelin-meter/js/modules/Meter/Consumption/Daily" +import KelinMeterConsumptionMinutely from "./plugins/kelin-meter/js/modules/Meter/Consumption/Minutely" +import SparkMeterSiteList from "./plugins/spark-meter/js/modules/Site/SiteList" +import SparkMeterModelList from "./plugins/spark-meter/js/modules/MeterModel/MeterModelList" +import SparkMeterCustomerList from "./plugins/spark-meter/js/modules/Customer/CustomerList" +import SparkMeterTariffList from "./plugins/spark-meter/js/modules/Tariff/TariffList" +import SparkMeterTariffDetail from "./plugins/spark-meter/js/modules/Tariff/TariffDetail" +import SparkMeterOverview from "./plugins/spark-meter/js/modules/Overview/Overview" +import SparkMeterSalesAccountList from "./plugins/spark-meter/js/modules/SalesAccount/SalesAccountList" +import SparkMeterSettings from "./plugins/spark-meter/js/modules/Setting/Setting" +import SteamaCoOverview from "./plugins/steama-meter/js/modules/Overview/Overview" +import SteamaCoSiteList from "./plugins/steama-meter/js/modules/Site/SiteList" +import SteamaCoCustomerList from "./plugins/steama-meter/js/modules/Customer/CustomerList" +import SteamaCoCustomerDetail from "./plugins/steama-meter/js/modules/Customer/CustomerMovements" +import SteamaCoMeterList from "./plugins/steama-meter/js/modules/Meter/MeterList" +import SteamaCoAgentList from "./plugins/steama-meter/js/modules/Agent/AgentList" +import SteamaCoSettings from "./plugins/steama-meter/js/modules/Setting/Setting" +import StronMeterOverview from "./plugins/stron-meter/js/modules/Overview/Overview" +import BulkRegistrationCsv from "./plugins/bulk-registration/js/modules/Csv" +import ViberMessagingOverview from "./plugins/viber-messaging/js/modules/Overview/Overview" +import WaveMoneyOverview from "./plugins/wave-money-payment-provider/js/modules/Overview/Overview" // FIXME: These are used as modules which seem broken. // https://github.com/EnAccess/micropowermanager/issues/142 -import WaveMoneyResult from './plugins/wave-money-payment-provider/js/modules/Payment/Result' -import WaveMoneyPayment from './plugins/wave-money-payment-provider/js/modules/Payment/Payment' -import MicroStarMeterOverview from './plugins/micro-star-meter/js/modules/Overview/Overview' -import SwiftaOverview from './plugins/swifta-payment-provider/js/modules/Overview/Overview' -import SunKingShsOverview from './plugins/sun-king-shs/js/modules/Overview/Overview' -import GomeLongOverview from './plugins/gome-long-meter/js/modules/Overview/Overview' -import WavecomTransactionUpload from './plugins/wavecom-payment-provider/js/modules/Component.vue' +import WaveMoneyResult from "./plugins/wave-money-payment-provider/js/modules/Payment/Result" +import WaveMoneyPayment from "./plugins/wave-money-payment-provider/js/modules/Payment/Payment" +import MicroStarMeterOverview from "./plugins/micro-star-meter/js/modules/Overview/Overview" +import SwiftaOverview from "./plugins/swifta-payment-provider/js/modules/Overview/Overview" +import SunKingShsOverview from "./plugins/sun-king-shs/js/modules/Overview/Overview" +import GomeLongOverview from "./plugins/gome-long-meter/js/modules/Overview/Overview" +import WavecomTransactionUpload from "./plugins/wavecom-payment-provider/js/modules/Component.vue" // FIXME: Move e-Bikes higher, it's not a Plugin -import EBikeList from './pages/EBikes/index.vue' -import DalyBmsOverview from './plugins/daly-bms/js/modules/Overview/Overview' -import AngazaShsOverview from './plugins/angaza-shs/js/modules/Overview/Overview' +import EBikeList from "./pages/EBikes/index.vue" +import DalyBmsOverview from "./plugins/daly-bms/js/modules/Overview/Overview" +import AngazaShsOverview from "./plugins/angaza-shs/js/modules/Overview/Overview" export const exportedRoutes = [ - { - path: '/welcome', - name: 'welcome', - components: { - default: Welcome, - header: LoginHeader, - footer: LoginFooter, - }, + { + path: "/welcome", + name: "welcome", + components: { + default: Welcome, + header: LoginHeader, + footer: LoginFooter, }, - { - path: '/login', - name: 'login', - components: { - default: Login, - header: LoginHeader, - footer: LoginFooter, - }, + }, + { + path: "/login", + name: "login", + components: { + default: Login, + header: LoginHeader, + footer: LoginFooter, }, - { - path: '/register', - name: 'register', - components: { - default: Register, - header: LoginHeader, - footer: LoginFooter, - }, + }, + { + path: "/register", + name: "register", + components: { + default: Register, + header: LoginHeader, + footer: LoginFooter, }, - { - path: '/forgot-password', - name: 'forgot-password', - components: { - default: ForgotPassword, - header: LoginHeader, - footer: LoginFooter, - }, + }, + { + path: "/forgot-password", + name: "forgot-password", + components: { + default: ForgotPassword, + header: LoginHeader, + footer: LoginFooter, + }, + }, + { + path: "/", + component: ClusterOverviewPage, + name: "cluster-list-dashboard", + meta: { + layout: "default", + breadcrumb: { + level: "base", + name: "Clusters", + link: "/", + }, }, - { - path: '/', + }, + { + path: "/clusters", + component: ChildRouteWrapper, + children: [ + { + path: "", component: ClusterOverviewPage, - name: 'cluster-list-dashboard', + name: "cluster-list", meta: { - layout: 'default', - breadcrumb: { - level: 'base', - name: 'Clusters', - link: '/', - }, + layout: "default", + breadcrumb: { + level: "base", + name: "Clusters", + link: "/clusters", + }, }, + }, + { + path: ":id", + component: ClusterDetailPage, + name: "cluster-detail", + meta: { + layout: "default", + breadcrumb: { + level: "detail", + name: "Clusters", + link: "/clusters", + target: "id", + }, + }, + }, + ], + }, + { + path: "/dashboards", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled: true, + name: "Dashboards", + icon: "home", + }, }, - { - path: '/clusters', - component: ChildRouteWrapper, - children: [ - { - path: '', - component: ClusterOverviewPage, - name: 'cluster-list', - meta: { - layout: 'default', - breadcrumb: { - level: 'base', - name: 'Clusters', - link: '/clusters', - }, - }, - }, - { - path: ':id', - component: ClusterDetailPage, - name: 'cluster-detail', - meta: { - layout: 'default', - breadcrumb: { - level: 'detail', - name: 'Clusters', - link: '/clusters', - target: 'id', - }, - }, - }, - ], - }, - { - path: '/dashboards', + children: [ + { + path: "clusters", + redirect: "/", + meta: { + sidebar: { + enabled: true, + name: "Clusters", + }, + }, + }, + { + path: "mini-grid", component: ChildRouteWrapper, meta: { - sidebar: { - enabled: true, - name: 'Dashboards', - icon: 'home', - }, + sidebar: { + enabled: true, + name: "Mini-Grid", + }, }, children: [ - { - path: 'clusters', - redirect: '/', - meta: { - sidebar: { - enabled: true, - name: 'Clusters', - }, - }, - }, - { - path: 'mini-grid', - component: ChildRouteWrapper, - meta: { - sidebar: { - enabled: true, - name: 'Mini-Grid', - }, - }, - children: [ - { - path: '', - component: MiniGridOverviewPage, - meta: { - layout: 'default', - breadcrumb: { - level: 'base', - name: 'Mini-Grids', - link: '/dashboards/mini-grid', - }, - sidebar: { - enabled: true, - name: 'Mini-Grid', - }, - }, - }, - { - path: ':id', - component: MiniGridDetailPage, - meta: { - layout: 'default', - breadcrumb: { - level: 'detail', - name: 'Mini-Grid', - link: '/dashboards/mini-grid', - target: 'id', - }, - }, - }, - ], - }, + { + path: "", + component: MiniGridOverviewPage, + meta: { + layout: "default", + breadcrumb: { + level: "base", + name: "Mini-Grids", + link: "/dashboards/mini-grid", + }, + sidebar: { + enabled: true, + name: "Mini-Grid", + }, + }, + }, + { + path: ":id", + component: MiniGridDetailPage, + meta: { + layout: "default", + breadcrumb: { + level: "detail", + name: "Mini-Grid", + link: "/dashboards/mini-grid", + target: "id", + }, + }, + }, ], + }, + ], + }, + { + // TBD: root route currently shows nothing + // Should we add a redirect here? + path: "/locations", + component: ChildRouteWrapper, + children: [ + { + path: "add-cluster", + component: AddCluster, + name: "cluster-new", + meta: { + layout: "default", + }, + }, + { + path: "add-village", + component: AddVillage, + name: "add-village", + meta: { + layout: "default", + }, + }, + { + path: "add-mini-grid", + component: AddMiniGrid, + name: "add-mini-grid", + meta: { + layout: "default", + }, + }, + ], + }, + { + path: "/settings", + component: Settings, + meta: { + layout: "default", }, - { - // TBD: root route currently shows nothing - // Should we add a redirect here? - path: '/locations', - component: ChildRouteWrapper, - children: [ - { - path: 'add-cluster', - component: AddCluster, - name: 'cluster-new', - meta: { - layout: 'default', - }, - }, - { - path: 'add-village', - component: AddVillage, - name: 'add-village', - meta: { - layout: 'default', - }, - }, - { - path: 'add-mini-grid', - component: AddMiniGrid, - name: 'add-mini-grid', - meta: { - layout: 'default', - }, - }, - ], + }, + { + path: "/profile", + component: Profile, + meta: { + layout: "default", + }, + }, + { + path: "/profile/management", + component: ProfileManagement, + meta: { + layout: "default", }, - { - path: '/settings', - component: Settings, + }, + { + path: "/reports", + component: Reports, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Reports", + icon: "text_snippet", + }, + }, + }, + { + path: "/people", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled: true, + name: "Customers", + icon: "supervisor_account", + }, + }, + children: [ + { + path: "", + component: CustomerList, meta: { - layout: 'default', + layout: "default", + breadcrumb: { + level: "base", + name: "Customers", + link: "/people", + }, }, - }, - { - path: '/profile', - component: Profile, + }, + { + path: ":id", + component: CustomerDetail, meta: { - layout: 'default', + layout: "default", + breadcrumb: { + level: "detail", + name: "Customers", + link: "/people", + target: "id", + }, }, + }, + ], + }, + { + path: "/transactions", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled: true, + name: "Transactions", + icon: "account_balance", + }, }, - { - path: '/profile/management', - component: ProfileManagement, + children: [ + { + path: "", + component: TransactionList, meta: { - layout: 'default', + layout: "default", + breadcrumb: { + level: "base", + name: "Transactions", + link: "/transactions", + }, }, - }, - { - path: '/reports', - component: Reports, + }, + { + // transaction list + // TODO: Why is this here? Doesn't seem to be used + path: "search", + component: TransactionSearch, meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Reports', - icon: 'text_snippet', - }, + layout: "default", }, - }, - { - path: '/people', - component: ChildRouteWrapper, + }, + { + path: ":id", + component: TransactionDetail, meta: { - sidebar: { - enabled: true, - name: 'Customers', - icon: 'supervisor_account', - }, + layout: "default", + breadcrumb: { + level: "detail", + name: "Transactions", + link: "/transactions", + target: "id", + }, }, - children: [ - { - path: '', - component: CustomerList, - meta: { - layout: 'default', - breadcrumb: { - level: 'base', - name: 'Customers', - link: '/people', - }, - }, - }, - { - path: ':id', - component: CustomerDetail, - meta: { - layout: 'default', - breadcrumb: { - level: 'detail', - name: 'Customers', - link: '/people', - target: 'id', - }, - }, - }, - ], + }, + ], + }, + { + path: "/tickets", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled: true, + name: "Tickets", + icon: "confirmation_number", + }, }, - { - path: '/transactions', - component: ChildRouteWrapper, + children: [ + { + path: "", + component: TicketList, meta: { - sidebar: { - enabled: true, - name: 'Transactions', - icon: 'account_balance', - }, + layout: "default", + sidebar: { + enabled: true, + name: "List", + }, }, - children: [ - { - path: '', - component: TransactionList, - meta: { - layout: 'default', - breadcrumb: { - level: 'base', - name: 'Transactions', - link: '/transactions', - }, - }, - }, - { - // transaction list - // TODO: Why is this here? Doesn't seem to be used - path: 'search', - component: TransactionSearch, - meta: { - layout: 'default', - }, - }, - { - path: ':id', - component: TransactionDetail, - meta: { - layout: 'default', - breadcrumb: { - level: 'detail', - name: 'Transactions', - link: '/transactions', - target: 'id', - }, - }, - }, - ], - }, - { - path: '/tickets', - component: ChildRouteWrapper, + }, + { + path: "settings/users", + component: TicketSettingsUsers, meta: { - sidebar: { - enabled: true, - name: 'Tickets', - icon: 'confirmation_number', - }, + layout: "default", }, - children: [ - { - path: '', - component: TicketList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'List', - }, - }, - }, - { - path: 'settings/users', - component: TicketSettingsUsers, - meta: { - layout: 'default', - }, - }, - { - path: 'settings/categories', - component: TicketSettingsCategories, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Categories', - }, - }, - }, - ], - }, - { - path: '/tariffs', - component: ChildRouteWrapper, + }, + { + path: "settings/categories", + component: TicketSettingsCategories, meta: { - sidebar: { - enabled: true, - name: 'Tariffs', - icon: 'widgets', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Categories", + }, }, - children: [ - { - path: '', - component: TariffList, - meta: { - layout: 'default', - breadcrumb: { - level: 'base', - name: 'Tariffs', - link: '/tariffs', - }, - }, - }, - { - path: ':id', - component: TariffDetail, - meta: { - layout: 'default', - breadcrumb: { - level: 'detail', - name: 'Tariffs', - link: '/tariffs', - target: 'id', - }, - }, - }, - ], + }, + ], + }, + { + path: "/tariffs", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled: true, + name: "Tariffs", + icon: "widgets", + }, }, - { - path: '/meters', - component: ChildRouteWrapper, + children: [ + { + path: "", + component: TariffList, meta: { - sidebar: { - enabled: true, - name: 'Meters', - icon: 'bolt', - }, + layout: "default", + breadcrumb: { + level: "base", + name: "Tariffs", + link: "/tariffs", + }, }, - children: [ - { - path: 'types', - component: MeterTypeList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Types', - }, - }, - }, - { - path: '', - component: ChildRouteWrapper, - meta: { - sidebar: { - enabled: true, - name: 'List', - }, - }, - children: [ - { - path: '', - component: MeterList, - meta: { - layout: 'default', - breadcrumb: { - level: 'base', - name: 'Meters', - link: '/meters', - }, - }, - }, - { - path: ':id', - component: MeterDetail, - meta: { - layout: 'default', - breadcrumb: { - level: 'detail', - name: 'Meters', - link: '/meters', - target: 'id', - }, - }, - }, - ], - }, - ], - }, - { - path: '/solar-home-systems', - component: SolarHomeSystem, + }, + { + path: ":id", + component: TariffDetail, meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Solar Home Systems', - icon: 'solar_power', - }, + layout: "default", + breadcrumb: { + level: "detail", + name: "Tariffs", + link: "/tariffs", + target: "id", + }, }, + }, + ], + }, + { + path: "/meters", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled: true, + name: "Meters", + icon: "bolt", + }, }, - { - path: '/targets', + children: [ + { + path: "types", + component: MeterTypeList, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Types", + }, + }, + }, + { + path: "", component: ChildRouteWrapper, meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Targets', - icon: 'gps_fixed', - }, + sidebar: { + enabled: true, + name: "List", + }, }, children: [ - { - path: '', - component: TargetList, - name: 'target-list', - meta: { - layout: 'default', - }, - }, - { - path: 'new', - component: TargetNew, - name: 'new-target', - meta: { - layout: 'default', - }, - }, + { + path: "", + component: MeterList, + meta: { + layout: "default", + breadcrumb: { + level: "base", + name: "Meters", + link: "/meters", + }, + }, + }, + { + path: ":id", + component: MeterDetail, + meta: { + layout: "default", + breadcrumb: { + level: "detail", + name: "Meters", + link: "/meters", + target: "id", + }, + }, + }, ], + }, + ], + }, + { + path: "/solar-home-systems", + component: SolarHomeSystem, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Solar Home Systems", + icon: "solar_power", + }, }, - { - // FIXME: Where is shown in the sidebar? - // Looks like it's only used in SparkMeter (?) - path: '/connection-types', - component: ChildRouteWrapper, - children: [ - { - path: '', - component: ChildRouteWrapper, - children: [ - { - path: '', - component: ConnectionTypeList, - name: 'connection-types', - meta: { - layout: 'default', - breadcrumb: { - level: 'base', - name: 'Connection Types', - link: '/connection-types', - }, - }, - }, - { - path: ':id', - component: ConnectionTypeDetail, - name: 'connection-type-detail', - meta: { - layout: 'default', - breadcrumb: { - level: 'detail', - name: 'Connection Types', - link: '/connection-types', - target: 'id', - }, - }, - }, - ], - }, - { - path: 'new', - component: ConnectionTypeNew, - name: 'new-connection-types', - meta: { - layout: 'default', - }, - }, - ], + }, + { + path: "/targets", + component: ChildRouteWrapper, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Targets", + icon: "gps_fixed", + }, }, - { - // FIXME: Where is shown in the sidebar? - // Looks like it's only used in SparkMeter (?) - path: '/connection-groups', - component: ConnectionGroupList, - name: 'connection-groups', + children: [ + { + path: "", + component: TargetList, + name: "target-list", meta: { - layout: 'default', + layout: "default", }, - }, - { - // TBD: root route currently shows nothing - // Should we add a redirect here? - path: '/sms', - component: ChildRouteWrapper, + }, + { + path: "new", + component: TargetNew, + name: "new-target", meta: { - sidebar: { - enabled: true, - name: 'Messages', - icon: 'sms', - }, + layout: "default", }, + }, + ], + }, + { + // FIXME: Where is shown in the sidebar? + // Looks like it's only used in SparkMeter (?) + path: "/connection-types", + component: ChildRouteWrapper, + children: [ + { + path: "", + component: ChildRouteWrapper, children: [ - // - { - path: 'list', - component: MessageList, - name: 'sms-list', - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Message List', - }, - }, - }, - { - path: 'newsms', - component: MessageNew, - name: 'new-sms', - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'New Message', - }, - }, - }, + { + path: "", + component: ConnectionTypeList, + name: "connection-types", + meta: { + layout: "default", + breadcrumb: { + level: "base", + name: "Connection Types", + link: "/connection-types", + }, + }, + }, + { + path: ":id", + component: ConnectionTypeDetail, + name: "connection-type-detail", + meta: { + layout: "default", + breadcrumb: { + level: "detail", + name: "Connection Types", + link: "/connection-types", + target: "id", + }, + }, + }, ], - }, - { - path: '/maintenance', - component: Maintenance, - name: 'maintenance', + }, + { + path: "new", + component: ConnectionTypeNew, + name: "new-connection-types", meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Maintenance', - icon: 'home_repair_service', - }, + layout: "default", }, + }, + ], + }, + { + // FIXME: Where is shown in the sidebar? + // Looks like it's only used in SparkMeter (?) + path: "/connection-groups", + component: ConnectionGroupList, + name: "connection-groups", + meta: { + layout: "default", + }, + }, + { + // TBD: root route currently shows nothing + // Should we add a redirect here? + path: "/sms", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled: true, + name: "Messages", + icon: "sms", + }, }, - { - path: '/assets', - component: ApplianceList, - name: 'asset', + children: [ + // + { + path: "list", + component: MessageList, + name: "sms-list", meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Appliances', - icon: 'devices_other', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Message List", + }, + }, + }, + { + path: "newsms", + component: MessageNew, + name: "new-sms", + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "New Message", + }, }, + }, + ], + }, + { + path: "/maintenance", + component: Maintenance, + name: "maintenance", + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Maintenance", + icon: "home_repair_service", + }, }, - { - path: '/agents', - component: ChildRouteWrapper, + }, + { + path: "/assets", + component: ApplianceList, + name: "asset", + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Appliances", + icon: "devices_other", + }, + }, + }, + { + path: "/agents", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled: true, + name: "Agents", + icon: "support_agent", + }, + }, + children: [ + { + path: "", + component: AgentList, meta: { - sidebar: { - enabled: true, - name: 'Agents', - icon: 'support_agent', - }, + layout: "default", + sidebar: { + enabled: true, + name: "List", + }, }, - children: [ - { - path: '', - component: AgentList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'List', - }, - }, - }, - { - path: 'commission-types', - redirect: '/commissions', - meta: { - sidebar: { - enabled: true, - name: 'Commission Types', - }, - }, - }, - { - path: ':id', - component: AgentDetail, - meta: { - layout: 'default', - breadcrumb: { - level: 'base', - name: 'Agents', - link: '/agents', - target: 'id', - }, - }, - }, - ], + }, + { + path: "commission-types", + redirect: "/commissions", + meta: { + sidebar: { + enabled: true, + name: "Commission Types", + }, + }, + }, + { + path: ":id", + component: AgentDetail, + meta: { + layout: "default", + breadcrumb: { + level: "base", + name: "Agents", + link: "/agents", + target: "id", + }, + }, + }, + ], + }, + { + // FIXME: This should probably be part of agents menu and endpoint + path: "/commissions", + component: AgentCommissionTypeList, + meta: { + layout: "default", }, - { - // FIXME: This should probably be part of agents menu and endpoint - path: '/commissions', - component: AgentCommissionTypeList, + }, + { + // FIXME: Should this be part of the Customer route? + path: "/sold-appliance-detail", + component: ChildRouteWrapper, + children: [ + { + path: ":id", + component: SoldApplianceDetail, meta: { - layout: 'default', + layout: "default", + breadcrumb: { + level: "detail", + name: "Sold Appliance Detail", + link: "/sold-appliance-detail", + target: "id", + }, }, + }, + ], + }, + { + path: "/e-bikes", + component: EBikeList, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "E-Bikes", + icon: "electric_bike", + }, }, - { - // FIXME: Should this be part of the Customer route? - path: '/sold-appliance-detail', - component: ChildRouteWrapper, - children: [ - { - path: ':id', - component: SoldApplianceDetail, - meta: { - layout: 'default', - breadcrumb: { - level: 'detail', - name: 'Sold Appliance Detail', - link: '/sold-appliance-detail', - target: 'id', - }, - }, - }, - ], + }, + /** + * + * PLUGIN ROUTES + * + */ + { + path: "/spark-meters", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 1, + name: "Spark Meter", + icon: "bolt", + }, }, - { - path: '/calin-meters', - component: ChildRouteWrapper, + children: [ + { + path: "sm-site", + component: SparkMeterSiteList, meta: { - sidebar: { - enabled: true, - name: 'Calin Meter', - icon: 'bolt', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Sites", + }, }, - children: [ - { - path: 'calin-overview', - component: CalinMeterOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - ], - }, - { - path: '/calin-smart-meters', - component: ChildRouteWrapper, + }, + { + path: "sm-meter-model", + component: SparkMeterModelList, meta: { - sidebar: { - enabled: true, - name: 'CalinSmart Meter', - icon: 'bolt', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Meter Models", + }, }, - children: [ - { - path: 'calin-smart-overview', - component: CalinSmartMeterOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - ], - }, - { - path: '/kelin-meters', - component: ChildRouteWrapper, + }, + { + path: "sm-customer", + component: SparkMeterCustomerList, meta: { - sidebar: { - enabled: true, - name: 'Kelin Meter', - icon: 'bolt', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Customers", + }, }, - children: [ - { - path: 'kelin-overview', - component: KelinMeterOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - { - path: 'kelin-customer', - component: KelinMeterCustomerList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Customers', - }, - }, - }, - { - path: 'kelin-setting', - component: KelinMeterSettings, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Settings', - }, - }, - }, - { - path: 'kelin-meter', - component: ChildRouteWrapper, - meta: { - sidebar: { - enabled: true, - name: 'Meters', - }, - }, - children: [ - { - path: '', - component: KelinMeterList, - meta: { - layout: 'default', - }, - }, - { - path: 'status/:meter', - component: KelinMeterStatus, - meta: { - layout: 'default', - }, - }, - { - path: 'daily-consumptions/:meter', - component: KelinMeterConsumptionDaily, - meta: { - layout: 'default', - }, - }, - { - path: 'minutely-consumptions/:meter', - component: KelinMeterConsumptionMinutely, - meta: { - layout: 'default', - }, - }, - ], - }, - ], - }, - { - path: '/spark-meters', + }, + { + path: "sm-tariff", component: ChildRouteWrapper, meta: { - sidebar: { - enabled: true, - name: 'Spark Meter', - icon: 'bolt', - }, + sidebar: { + enabled: true, + name: "Tariffs", + }, }, children: [ - { - path: 'sm-site', - component: SparkMeterSiteList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Sites', - }, - }, - }, - { - path: 'sm-meter-model', - component: SparkMeterModelList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Meter Models', - }, - }, - }, - { - path: 'sm-customer', - component: SparkMeterCustomerList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Customers', - }, - }, - }, - { - path: 'sm-tariff', - component: ChildRouteWrapper, - meta: { - sidebar: { - enabled: true, - name: 'Tariffs', - }, - }, - children: [ - { - path: '', - component: SparkMeterTariffList, - meta: { - layout: 'default', - }, - }, - { - path: ':id', - component: SparkMeterTariffDetail, - meta: { - layout: 'default', - }, - }, - ], - }, - { - path: 'sm-overview', - component: SparkMeterOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - { - path: 'sm-sales-account', - component: SparkMeterSalesAccountList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Sales Accounts', - }, - }, - }, - { - path: 'sm-setting', - component: SparkMeterSettings, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Settings', - }, - }, - }, + { + path: "", + component: SparkMeterTariffList, + meta: { + layout: "default", + }, + }, + { + path: ":id", + component: SparkMeterTariffDetail, + meta: { + layout: "default", + }, + }, ], + }, + { + path: "sm-overview", + component: SparkMeterOverview, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, + }, + }, + { + path: "sm-sales-account", + component: SparkMeterSalesAccountList, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Sales Accounts", + }, + }, + }, + { + path: "sm-setting", + component: SparkMeterSettings, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Settings", + }, + }, + }, + ], + }, + { + path: "/steama-meters", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 2, + name: "SteamaCo Meter", + icon: "bolt", + }, }, - { - path: '/steama-meters', - component: ChildRouteWrapper, + children: [ + { + path: "steama-overview", + component: SteamaCoOverview, meta: { - sidebar: { - enabled: true, - name: 'SteamaCo Meter', - icon: 'bolt', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, - children: [ - { - path: 'steama-overview', - component: SteamaCoOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - { - path: 'steama-site', - component: SteamaCoSiteList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Sites', - }, - }, - }, - { - path: 'steama-customer', - component: SteamaCoCustomerList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Customers', - }, - }, - }, - { - path: 'steama-transaction/:customer_id', - component: SteamaCoCustomerDetail, - meta: { - layout: 'default', - }, - }, - { - path: 'steama-meter', - component: SteamaCoMeterList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Meters', - }, - }, - }, - { - path: 'steama-agent', - component: SteamaCoAgentList, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Agents', - }, - }, - }, - { - path: 'steama-setting', - component: SteamaCoSettings, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Settings', - }, - }, - }, - ], + }, + { + path: "steama-site", + component: SteamaCoSiteList, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Sites", + }, + }, + }, + { + path: "steama-customer", + component: SteamaCoCustomerList, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Customers", + }, + }, + }, + { + path: "steama-transaction/:customer_id", + component: SteamaCoCustomerDetail, + meta: { + layout: "default", + }, + }, + { + path: "steama-meter", + component: SteamaCoMeterList, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Meters", + }, + }, + }, + { + path: "steama-agent", + component: SteamaCoAgentList, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Agents", + }, + }, + }, + { + path: "steama-setting", + component: SteamaCoSettings, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Settings", + }, + }, + }, + ], + }, + { + path: "/calin-meters", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 3, + name: "Calin Meter", + icon: "bolt", + }, }, - { - path: '/stron-meters', - component: ChildRouteWrapper, + children: [ + { + path: "calin-overview", + component: CalinMeterOverview, meta: { - sidebar: { - enabled: true, - name: 'Stron Meter', - icon: 'bolt', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, - children: [ - { - path: 'stron-overview', - component: StronMeterOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - ], + }, + ], + }, + { + path: "/calin-smart-meters", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 4, + name: "CalinSmart Meter", + icon: "bolt", + }, }, - { - path: '/bulk-registration/bulk-registration', - component: ChildRouteWrapper, + children: [ + { + path: "calin-smart-overview", + component: CalinSmartMeterOverview, meta: { - sidebar: { - enabled: true, - name: 'Bulk Registration', - icon: 'upload_file', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, - children: [ - { - path: '', - component: BulkRegistrationCsv, - meta: { - layout: 'default', - }, - }, - ], + }, + ], + }, + { + path: "/kelin-meters", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 5, + name: "Kelin Meter", + icon: "bolt", + }, }, - { - path: '/viber-messaging', + children: [ + { + path: "kelin-overview", + component: KelinMeterOverview, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, + }, + }, + { + path: "kelin-customer", + component: KelinMeterCustomerList, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Customers", + }, + }, + }, + { + path: "kelin-setting", + component: KelinMeterSettings, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Settings", + }, + }, + }, + { + path: "kelin-meter", component: ChildRouteWrapper, meta: { - sidebar: { - enabled: true, - name: 'Viber Messaging', - icon: 'message', - }, + sidebar: { + enabled: true, + name: "Meters", + }, }, children: [ - { - path: 'viber-overview', - component: ViberMessagingOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, + { + path: "", + component: KelinMeterList, + meta: { + layout: "default", + }, + }, + { + path: "status/:meter", + component: KelinMeterStatus, + meta: { + layout: "default", + }, + }, + { + path: "daily-consumptions/:meter", + component: KelinMeterConsumptionDaily, + meta: { + layout: "default", + }, + }, + { + path: "minutely-consumptions/:meter", + component: KelinMeterConsumptionMinutely, + meta: { + layout: "default", + }, + }, ], + }, + ], + }, + { + path: "/stron-meters", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 6, + name: "Stron Meter", + icon: "bolt", + }, }, - { - path: '/wave-money', - component: ChildRouteWrapper, + children: [ + { + path: "stron-overview", + component: StronMeterOverview, meta: { - sidebar: { - enabled: true, - name: 'WaveMoney', - icon: 'money', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, - children: [ - { - path: 'wave-money-overview', - component: WaveMoneyOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - { - path: 'payment/:name/:id', - modules: { - default: WaveMoneyPayment, - header: LoginHeader, - footer: LoginFooter, - }, - name: '/wave-money/payment', - }, - { - path: 'result/:name/:id', - name: '/wave-money/result', - modules: { - default: WaveMoneyResult, - header: LoginHeader, - footer: LoginFooter, - }, - }, - ], + }, + ], + }, + { + path: "/swifta-payment", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 7, + name: "Swifta", + icon: "money", + }, }, - { - path: '/micro-star-meters', - component: ChildRouteWrapper, + children: [ + { + path: "swifta-payment-overview", + component: SwiftaOverview, meta: { - sidebar: { - enabled: true, - name: 'MicroStar Meter', - icon: 'bolt', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, - children: [ - { - path: 'micro-star-overview', - component: MicroStarMeterOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - ], + }, + ], + }, + // FIXME: Where is mpm_plugin_id = 8? + // Seems to be a plugin called "MesombPayment" + { + path: "/bulk-registration/bulk-registration", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 9, + name: "Bulk Registration", + icon: "upload_file", + }, }, - { - path: '/swifta-payment', - component: ChildRouteWrapper, + children: [ + { + path: "", + component: BulkRegistrationCsv, meta: { - sidebar: { - enabled: true, - name: 'Swifta', - icon: 'money', - }, + layout: "default", }, - children: [ - { - path: 'swifta-payment-overview', - component: SwiftaOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - ], + }, + ], + }, + { + path: "/viber-messaging", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 10, + name: "Viber Messaging", + icon: "message", + }, }, - { - path: '/sun-king-shs', - component: ChildRouteWrapper, + children: [ + { + path: "viber-overview", + component: ViberMessagingOverview, meta: { - sidebar: { - enabled: true, - name: 'SunKing SHS', - icon: 'bolt', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, - children: [ - { - path: 'sun-king-overview', - component: SunKingShsOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - ], + }, + ], + }, + { + path: "/wave-money", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 11, + name: "WaveMoney", + icon: "money", + }, }, - { - path: '/gome-long-meters', - component: ChildRouteWrapper, + children: [ + { + path: "wave-money-overview", + component: WaveMoneyOverview, meta: { - sidebar: { - enabled: true, - name: 'GomeLong Meter', - icon: 'bolt', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, - children: [ - { - path: 'gome-long-overview', - component: GomeLongOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - ], + }, + { + path: "payment/:name/:id", + modules: { + default: WaveMoneyPayment, + header: LoginHeader, + footer: LoginFooter, + }, + name: "/wave-money/payment", + }, + { + path: "result/:name/:id", + name: "/wave-money/result", + modules: { + default: WaveMoneyResult, + header: LoginHeader, + footer: LoginFooter, + }, + }, + ], + }, + { + path: "/micro-star-meters", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 12, + name: "MicroStar Meter", + icon: "bolt", + }, }, - { - path: '/wavecom/transactions', - component: WavecomTransactionUpload, + children: [ + { + path: "micro-star-overview", + component: MicroStarMeterOverview, meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Wavecom Payment Provider', - icon: 'upload_file', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, + }, + ], + }, + + { + path: "/sun-king-shs", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 13, + name: "SunKing SHS", + icon: "bolt", + }, }, - { - path: '/e-bikes', - component: EBikeList, + children: [ + { + path: "sun-king-overview", + component: SunKingShsOverview, meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'E-Bikes', - icon: 'electric_bike', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, + }, + ], + }, + { + path: "/gome-long-meters", + component: ChildRouteWrapper, + meta: { + sidebar: { + enabled_by_mpm_plugin_id: 14, + name: "GomeLong Meter", + icon: "bolt", + }, }, - { - path: '/daly-bms', - component: ChildRouteWrapper, + children: [ + { + path: "gome-long-overview", + component: GomeLongOverview, meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Daly BMS', - icon: 'charging_station', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, - children: [ - { - path: 'daly-bms-overview', - component: DalyBmsOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - ], + }, + ], + }, + { + path: "/wavecom/transactions", + component: WavecomTransactionUpload, + meta: { + layout: "default", + sidebar: { + enabled_by_mpm_plugin_id: 15, + name: "Wavecom Payment Provider", + icon: "upload_file", + }, }, - { - path: '/angaza-shs', - component: ChildRouteWrapper, + }, + { + path: "/daly-bms", + component: ChildRouteWrapper, + meta: { + layout: "default", + sidebar: { + enabled_by_mpm_plugin_id: 16, + name: "Daly BMS", + icon: "charging_station", + }, + }, + children: [ + { + path: "daly-bms-overview", + component: DalyBmsOverview, meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Angaza SHS', - icon: 'bolt', - }, + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, }, - children: [ - { - path: 'angaza-overview', - component: AngazaShsOverview, - meta: { - layout: 'default', - sidebar: { - enabled: true, - name: 'Overview', - }, - }, - }, - ], + }, + ], + }, + { + path: "/angaza-shs", + component: ChildRouteWrapper, + meta: { + layout: "default", + sidebar: { + enabled_by_mpm_plugin_id: 17, + name: "Angaza SHS", + icon: "bolt", + }, }, + children: [ + { + path: "angaza-overview", + component: AngazaShsOverview, + meta: { + layout: "default", + sidebar: { + enabled: true, + name: "Overview", + }, + }, + }, + ], + }, ] diff --git a/Website/ui/src/Helpers/ErrorHander.js b/Website/ui/src/Helpers/ErrorHander.js index 253d91460..5efe88fa1 100644 --- a/Website/ui/src/Helpers/ErrorHander.js +++ b/Website/ui/src/Helpers/ErrorHander.js @@ -1,14 +1,14 @@ export class ErrorHandler { - constructor(_message, _type, _status_code) { - this.exception = { - message: _message, - type: _type, - status_code: _status_code, - } - this.throwException() + constructor(_message, _type, _status_code) { + this.exception = { + message: _message, + type: _type, + status_code: _status_code, } + this.throwException() + } - throwException() { - throw this.exception - } + throwException() { + throw this.exception + } } diff --git a/Website/ui/src/Helpers/Paginator.js b/Website/ui/src/Helpers/Paginator.js index 54d8a466c..388975cc0 100644 --- a/Website/ui/src/Helpers/Paginator.js +++ b/Website/ui/src/Helpers/Paginator.js @@ -1,59 +1,59 @@ -import { baseUrl } from '@/repositories/Client/AxiosClient' +import { baseUrl } from "@/repositories/Client/AxiosClient" export class Paginator { - constructor(url) { - //when the consumer passes a fully qualified url use it, otherwise use the base url from axiosClient - this.url = url.startsWith('http') ? url : `${baseUrl}${url}` - this._initialize() - this.postData = null - } - - _initialize() { - this.currentPage = 0 - this.totalPage = 0 - this.from = 0 - this.to = 0 - this.totalEntries = 0 - this.perPage = 15 - } - - setPaginationBaseUrl(url) { - this.url = url - } - - setPostData(data) { - this.postData = data - } - - nextPage() { - if (this.currentPage < this.totalPage) this.currentPage++ - } - - prevPage() { - if (this.currentPage > 1) this.currentPage-- - } - - loadPage(page, param = {}) { - // take a local, shallow copy of params to prevent - // unintended route changes - const localParam = { ...param } - - localParam['page'] = page - localParam['per_page'] = this.perPage - - return axios - .get(this.url, { - params: localParam, - }) - .then((response) => { - let data = response.data - this.from = data.from - this.to = data.to - this.totalPage = data.last_page - this.currentPage = data.current_page - this.totalEntries = data.total - - return data - }) - } + constructor(url) { + //when the consumer passes a fully qualified url use it, otherwise use the base url from axiosClient + this.url = url.startsWith("http") ? url : `${baseUrl}${url}` + this._initialize() + this.postData = null + } + + _initialize() { + this.currentPage = 0 + this.totalPage = 0 + this.from = 0 + this.to = 0 + this.totalEntries = 0 + this.perPage = 15 + } + + setPaginationBaseUrl(url) { + this.url = url + } + + setPostData(data) { + this.postData = data + } + + nextPage() { + if (this.currentPage < this.totalPage) this.currentPage++ + } + + prevPage() { + if (this.currentPage > 1) this.currentPage-- + } + + loadPage(page, param = {}) { + // take a local, shallow copy of params to prevent + // unintended route changes + const localParam = { ...param } + + localParam["page"] = page + localParam["per_page"] = this.perPage + + return axios + .get(this.url, { + params: localParam, + }) + .then((response) => { + let data = response.data + this.from = data.from + this.to = data.to + this.totalPage = data.last_page + this.currentPage = data.current_page + this.totalEntries = data.total + + return data + }) + } } diff --git a/Website/ui/src/Helpers/TranslateItem.js b/Website/ui/src/Helpers/TranslateItem.js index 0c1d4eaba..2c722a93c 100644 --- a/Website/ui/src/Helpers/TranslateItem.js +++ b/Website/ui/src/Helpers/TranslateItem.js @@ -1,9 +1,9 @@ function translateItem(name) { - if (this.$tc('menu.' + name).search('menu') !== -1) { - return name - } else { - return this.$tc('menu.' + name) - } + if (this.$tc("menu." + name).search("menu") !== -1) { + return name + } else { + return this.$tc("menu." + name) + } } export { translateItem } diff --git a/Website/ui/src/Helpers/Utils.js b/Website/ui/src/Helpers/Utils.js index 684eebfd7..766411c5a 100644 --- a/Website/ui/src/Helpers/Utils.js +++ b/Website/ui/src/Helpers/Utils.js @@ -1,53 +1,45 @@ export const convertObjectKeysToCamelCase = (obj) => { - const result = {} - for (const [key, value] of Object.entries(obj)) { - const camelKey = snakeToCamel(key) + const result = {} + for (const [key, value] of Object.entries(obj)) { + const camelKey = snakeToCamel(key) - if ( - value !== null && - typeof value === 'object' && - !Array.isArray(value) - ) { - result[camelKey] = convertObjectKeysToCamelCase(value) - } else if (Array.isArray(value)) { - result[camelKey] = value?.map((item) => - typeof item === 'object' && item !== null - ? convertObjectKeysToCamelCase(item) - : item, - ) - } else { - result[camelKey] = value - } + if (value !== null && typeof value === "object" && !Array.isArray(value)) { + result[camelKey] = convertObjectKeysToCamelCase(value) + } else if (Array.isArray(value)) { + result[camelKey] = value?.map((item) => + typeof item === "object" && item !== null + ? convertObjectKeysToCamelCase(item) + : item, + ) + } else { + result[camelKey] = value } - return result + } + return result } const snakeToCamel = (str) => { - return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) + return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) } export const convertObjectKeysToSnakeCase = (obj) => { - const result = {} - for (const [key, value] of Object.entries(obj)) { - const snakeKey = camelToSnake(key) + const result = {} + for (const [key, value] of Object.entries(obj)) { + const snakeKey = camelToSnake(key) - if ( - value !== null && - typeof value === 'object' && - !Array.isArray(value) - ) { - result[snakeKey] = convertObjectKeysToSnakeCase(value) - } else if (Array.isArray(value)) { - result[snakeKey] = value?.map((item) => - typeof item === 'object' && item !== null - ? convertObjectKeysToSnakeCase(item) - : item, - ) - } else { - result[snakeKey] = value - } + if (value !== null && typeof value === "object" && !Array.isArray(value)) { + result[snakeKey] = convertObjectKeysToSnakeCase(value) + } else if (Array.isArray(value)) { + result[snakeKey] = value?.map((item) => + typeof item === "object" && item !== null + ? convertObjectKeysToSnakeCase(item) + : item, + ) + } else { + result[snakeKey] = value } - return result + } + return result } const camelToSnake = (str) => { - return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`) + return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`) } diff --git a/Website/ui/src/__tests__/AgentService.test.js b/Website/ui/src/__tests__/AgentService.test.js index 620526023..3c1b3dca7 100644 --- a/Website/ui/src/__tests__/AgentService.test.js +++ b/Website/ui/src/__tests__/AgentService.test.js @@ -1,56 +1,56 @@ -jest.mock('../repositories/AgentRepository') -import { AgentService } from '../services/AgentService' +jest.mock("../repositories/AgentRepository") +import { AgentService } from "../services/AgentService" const agentService = new AgentService() const agentProperties = [ - 'id', - 'personId', - 'miniGrid', - 'deviceId', - 'name', - 'surname', - 'email', - 'balance', - 'gender', - 'phone', - 'birthday', - 'commissionType', - 'commissionRevenue', - 'commissionTypeId', - 'dueToEnergySupplier', + "id", + "personId", + "miniGrid", + "deviceId", + "name", + "surname", + "email", + "balance", + "gender", + "phone", + "birthday", + "commissionType", + "commissionRevenue", + "commissionTypeId", + "dueToEnergySupplier", ] -describe('AgentService #create', () => { - it('should create a new agent successfully', async () => { - const agentCreateData = require('./TestData/agentCreate.json') - agentService.agent = agentCreateData - const data = await agentService.createAgent() - expect(Object.keys(data).length).not.toEqual(0) - Object.keys(data).forEach(function (item) { - expect(data[item]).not.toBeUndefined() - }) +describe("AgentService #create", () => { + it("should create a new agent successfully", async () => { + const agentCreateData = require("./TestData/agentCreate.json") + agentService.agent = agentCreateData + const data = await agentService.createAgent() + expect(Object.keys(data).length).not.toEqual(0) + Object.keys(data).forEach(function (item) { + expect(data[item]).not.toBeUndefined() }) + }) }) -describe('AgentService #updateAgent', () => { - it('should update agent successfully', async () => { - const agentUpdateDate = require('./TestData/agentUpdate.json') - agentService.agent = agentUpdateDate - const data = await agentService.updateAgent() - expect(Object.keys(data).length).not.toEqual(0) - Object.keys(data).forEach(function (item) { - expect(data[item]).toEqual(agentUpdateDate[item]) - }) +describe("AgentService #updateAgent", () => { + it("should update agent successfully", async () => { + const agentUpdateDate = require("./TestData/agentUpdate.json") + agentService.agent = agentUpdateDate + const data = await agentService.updateAgent() + expect(Object.keys(data).length).not.toEqual(0) + Object.keys(data).forEach(function (item) { + expect(data[item]).toEqual(agentUpdateDate[item]) }) + }) }) -describe('AgentService #getAgent', () => { - it('should get specific agent data for details page', async () => { - const data = await agentService.getAgent(3) - expect(Object.keys(data).length).not.toEqual(0) - }) - it('should get agent data with these properties', async () => { - const data = await agentService.getAgent(3) - Object.keys(data).forEach(function (item, index) { - expect(item).toEqual(agentProperties[index]) - }) +describe("AgentService #getAgent", () => { + it("should get specific agent data for details page", async () => { + const data = await agentService.getAgent(3) + expect(Object.keys(data).length).not.toEqual(0) + }) + it("should get agent data with these properties", async () => { + const data = await agentService.getAgent(3) + Object.keys(data).forEach(function (item, index) { + expect(item).toEqual(agentProperties[index]) }) + }) }) diff --git a/Website/ui/src/__tests__/BatchRevenueService.test.js b/Website/ui/src/__tests__/BatchRevenueService.test.js index fbae8c3e6..523da336d 100644 --- a/Website/ui/src/__tests__/BatchRevenueService.test.js +++ b/Website/ui/src/__tests__/BatchRevenueService.test.js @@ -1,55 +1,55 @@ -jest.mock('../repositories/BatchRevenueRepository') -import { BatchRevenueService } from '../services/BatchRevenueService' +jest.mock("../repositories/BatchRevenueRepository") +import { BatchRevenueService } from "../services/BatchRevenueService" const batchRevenueService = new BatchRevenueService() const batchRevenueProperties = [ - 'target', - 'total_connections', - 'new_connections', - 'revenue', - 'averages', + "target", + "total_connections", + "new_connections", + "revenue", + "averages", ] -describe('BatchRevenueService #getRevenueForPeriod', () => { - it('should get Batch Revenues data successfully', async () => { - const data = await batchRevenueService.getRevenueForPeriod() - expect(Object.keys(data).length).not.toEqual(0) - }) - it('should get formatted data for Revenue Analysis', async () => { - const data = await batchRevenueService.getRevenueForPeriod() - Object.keys(data).forEach(function (item) { - expect(item).toEqual('revenueList') - Object.keys(data[item]).forEach(function (sub, index) { - expect(sub).toEqual(batchRevenueProperties[index]) - }) - }) +describe("BatchRevenueService #getRevenueForPeriod", () => { + it("should get Batch Revenues data successfully", async () => { + const data = await batchRevenueService.getRevenueForPeriod() + expect(Object.keys(data).length).not.toEqual(0) + }) + it("should get formatted data for Revenue Analysis", async () => { + const data = await batchRevenueService.getRevenueForPeriod() + Object.keys(data).forEach(function (item) { + expect(item).toEqual("revenueList") + Object.keys(data[item]).forEach(function (sub, index) { + expect(sub).toEqual(batchRevenueProperties[index]) + }) }) + }) }) -describe('BatchRevenueService #initializeDonutCharts', () => { - it('should get initialized Batch Revenue data for donut chart', async () => { - const initValue = ['connection', 'revenue'] - const batchData = await batchRevenueService.getRevenueForPeriod() - const donutChartData = await batchRevenueService.initializeDonutCharts( - initValue, - batchData, - ) - const data = batchData.revenueList.revenue - Object.keys(data).forEach(function (item, index) { - expect(item).toEqual(donutChartData[index + 1][0]) - expect(data[item]).toEqual(donutChartData[index + 1][1]) - }) +describe("BatchRevenueService #initializeDonutCharts", () => { + it("should get initialized Batch Revenue data for donut chart", async () => { + const initValue = ["connection", "revenue"] + const batchData = await batchRevenueService.getRevenueForPeriod() + const donutChartData = await batchRevenueService.initializeDonutCharts( + initValue, + batchData, + ) + const data = batchData.revenueList.revenue + Object.keys(data).forEach(function (item, index) { + expect(item).toEqual(donutChartData[index + 1][0]) + expect(data[item]).toEqual(donutChartData[index + 1][1]) }) + }) }) -describe('BatchRevenueService #initializeColumnChart', () => { - it('should get initialized batch revenue data for revenue target per customer type', async () => { - const batchRevenueData = await batchRevenueService.getRevenueForPeriod() - const columnData = - await batchRevenueService.initializeColumnChart(batchRevenueData) - const targets = batchRevenueData.revenueList.target.targets - Object.keys(targets).forEach(function (item, index) { - expect(item).toEqual(columnData[index + 1][0]) - expect(columnData[index + 1][1]).not.toBeUndefined() - expect(columnData[index + 1][1]).not.toBeNull() - expect(columnData[index + 1][1]).not.toBeNaN() - }) +describe("BatchRevenueService #initializeColumnChart", () => { + it("should get initialized batch revenue data for revenue target per customer type", async () => { + const batchRevenueData = await batchRevenueService.getRevenueForPeriod() + const columnData = + await batchRevenueService.initializeColumnChart(batchRevenueData) + const targets = batchRevenueData.revenueList.target.targets + Object.keys(targets).forEach(function (item, index) { + expect(item).toEqual(columnData[index + 1][0]) + expect(columnData[index + 1][1]).not.toBeUndefined() + expect(columnData[index + 1][1]).not.toBeNull() + expect(columnData[index + 1][1]).not.toBeNaN() }) + }) }) diff --git a/Website/ui/src/__tests__/CityService.test.js b/Website/ui/src/__tests__/CityService.test.js index 9244b6442..2eb513cdb 100644 --- a/Website/ui/src/__tests__/CityService.test.js +++ b/Website/ui/src/__tests__/CityService.test.js @@ -1,46 +1,46 @@ -jest.mock('../repositories/CityRepository') -import { CityService } from '../services/CityService' +jest.mock("../repositories/CityRepository") +import { CityService } from "../services/CityService" const cityService = new CityService() const cityServiceProperties = [ - 'id', - 'name', - 'country_id', - 'created_at', - 'updated_at', - 'cluster_id', - 'mini_grid_id', + "id", + "name", + "country_id", + "created_at", + "updated_at", + "cluster_id", + "mini_grid_id", ] -describe('CityService #getCities', () => { - it('should get cities data', async () => { - const data = await cityService.getCities() - expect(Object.keys(data[0]).length).toEqual(7) +describe("CityService #getCities", () => { + it("should get cities data", async () => { + const data = await cityService.getCities() + expect(Object.keys(data[0]).length).toEqual(7) + }) + it("should list cities data with these properties", async () => { + const data = await cityService.getCities() + Object.keys(data[0]).forEach(function (item, index) { + expect(item).toEqual(cityServiceProperties[index]) }) - it('should list cities data with these properties', async () => { - const data = await cityService.getCities() - Object.keys(data[0]).forEach(function (item, index) { - expect(item).toEqual(cityServiceProperties[index]) - }) - }) - it('should not have null data', async () => { - const data = await cityService.getCities() - Object.keys(data).forEach(function (item) { - expect(data[item]).not.toBeNull() - expect(data[item]).not.toEqual('') - }) + }) + it("should not have null data", async () => { + const data = await cityService.getCities() + Object.keys(data).forEach(function (item) { + expect(data[item]).not.toBeNull() + expect(data[item]).not.toEqual("") }) + }) }) -describe('CityService #createCity', () => { - it('should create new City successfully', async () => { - const testData = require('./TestData/cityCreate.json') - const data = await cityService.createCity( - testData.name, - testData.cluster_id, - testData.mini_grid_id, - testData.geo_data, - ) - expect(data).toHaveProperty('id') - expect(data.id).not.toBeNull() - expect(data.id).not.toBeUndefined() - }) +describe("CityService #createCity", () => { + it("should create new City successfully", async () => { + const testData = require("./TestData/cityCreate.json") + const data = await cityService.createCity( + testData.name, + testData.cluster_id, + testData.mini_grid_id, + testData.geo_data, + ) + expect(data).toHaveProperty("id") + expect(data.id).not.toBeNull() + expect(data.id).not.toBeUndefined() + }) }) diff --git a/Website/ui/src/__tests__/ClusterService.test.js b/Website/ui/src/__tests__/ClusterService.test.js index f1343381d..931753493 100644 --- a/Website/ui/src/__tests__/ClusterService.test.js +++ b/Website/ui/src/__tests__/ClusterService.test.js @@ -1,149 +1,143 @@ -import i18n from '../i18n' -jest.mock('../repositories/ClusterRepository') -import { ClusterService } from '../services/ClusterService' +import i18n from "../i18n" +jest.mock("../repositories/ClusterRepository") +import { ClusterService } from "../services/ClusterService" const clusterService = new ClusterService() const clusterProperties = [ - 'id', - 'name', - 'manager_id', - 'created_at', - 'updated_at', - 'meterCount', - 'revenue', - 'population', + "id", + "name", + "manager_id", + "created_at", + "updated_at", + "meterCount", + "revenue", + "population", ] -describe('ClusterService #getClusters', () => { - it('should get clusters successfully', async () => { - const data = await clusterService.getClusters() - expect(Object.keys(data[0]).length).not.toEqual(0) - }) - it('should list clusters data with the properties', async () => { - const data = await clusterService.getClusters() - Object.keys(data[0]).forEach(function (item, index) { - expect(item).toEqual(clusterProperties[index]) - }) +describe("ClusterService #getClusters", () => { + it("should get clusters successfully", async () => { + const data = await clusterService.getClusters() + expect(Object.keys(data[0]).length).not.toEqual(0) + }) + it("should list clusters data with the properties", async () => { + const data = await clusterService.getClusters() + Object.keys(data[0]).forEach(function (item, index) { + expect(item).toEqual(clusterProperties[index]) }) + }) }) -describe('ClusterService #createCluster', () => { - it('should create new cluster successfully', async () => { - const testData = require('./TestData/clusterCreate.json') - const data = await clusterService.createCluster( - testData.geoData, - testData.geo_type, - testData.name, - testData.manager_id, - ) - expect(data).toHaveProperty('id') - expect(data.id).not.toBeNull() - expect(data.id).not.toBeUndefined() - }) +describe("ClusterService #createCluster", () => { + it("should create new cluster successfully", async () => { + const testData = require("./TestData/clusterCreate.json") + const data = await clusterService.createCluster( + testData.geoData, + testData.geo_type, + testData.name, + testData.manager_id, + ) + expect(data).toHaveProperty("id") + expect(data.id).not.toBeNull() + expect(data.id).not.toBeUndefined() + }) }) -describe('ClusterService #getAllRevenues', () => { - it('should get clusters revenues data for chart ', async () => { - const data = await clusterService.getAllRevenues('monthly') - expect(Object.keys(data[0]).length).not.toEqual(0) - }) +describe("ClusterService #getAllRevenues", () => { + it("should get clusters revenues data for chart ", async () => { + const data = await clusterService.getAllRevenues("monthly") + expect(Object.keys(data[0]).length).not.toEqual(0) + }) }) -describe('ClusterService #getClusterCitiesRevenue', () => { - it('should get cluster cities revenue data for chart', async () => { - const financialData = await clusterService.getClusterCitiesRevenue( - 12, - 'monthly', - ) - expect(financialData.length).not.toEqual(0) - }) +describe("ClusterService #getClusterCitiesRevenue", () => { + it("should get cluster cities revenue data for chart", async () => { + const financialData = await clusterService.getClusterCitiesRevenue( + 12, + "monthly", + ) + expect(financialData.length).not.toEqual(0) + }) }) -describe('ClusterService #lineChartData', () => { - it('should get formatted Line chart Data for Clusters', async () => { - const financialData = await clusterService.getAllRevenues('monthly') - const data = clusterService.lineChartData(false) - expect(data.length).not.toBe(0) - expect(data[0][0]).toBe(i18n.tc('words.period')) - expect(financialData[0].name).toEqual(data[0][1]) - for (let i = 0; i < financialData.length; i++) { - expect(financialData[i].name).toEqual(data[0][i + 1]) - Object.keys(financialData[i].period).forEach( - function (item, index) { - expect(financialData[i].period[item].revenue).toEqual( - data[index + 1][i + 1], - ) - }, - ) - } - }) - it('should get formatted Line chart data for Cluster Mini Grids', async () => { - const financialData = await clusterService.getClusterCitiesRevenue( - 12, - 'monthly', +describe("ClusterService #lineChartData", () => { + it("should get formatted Line chart Data for Clusters", async () => { + const financialData = await clusterService.getAllRevenues("monthly") + const data = clusterService.lineChartData(false) + expect(data.length).not.toBe(0) + expect(data[0][0]).toBe(i18n.tc("words.period")) + expect(financialData[0].name).toEqual(data[0][1]) + for (let i = 0; i < financialData.length; i++) { + expect(financialData[i].name).toEqual(data[0][i + 1]) + Object.keys(financialData[i].period).forEach(function (item, index) { + expect(financialData[i].period[item].revenue).toEqual( + data[index + 1][i + 1], ) - const data = clusterService.lineChartData(false) - expect(data.length).not.toBe(0) - expect(data[0][0]).toBe(i18n.tc('words.period')) - for (let i = 0; i < financialData.length; i++) { - expect(financialData[i].name).toEqual(data[0][i + 1]) - Object.keys(financialData[i].period).forEach( - function (item, index) { - expect(financialData[i].period[item].revenue).toEqual( - data[index + 1][i + 1], - ) - }, - ) - } - }) -}) -describe('ClusterService #columnChartData', () => { - it('should get formatted Column Chart Data for Clusters', async () => { - const financialData = await clusterService.getAllRevenues('monthly') - const data = clusterService.columnChartData(false, 'cluster') - expect(data.length).not.toBe(0) - expect(financialData.length).toEqual(data.length - 1) - expect(data[0][0]).toBe(i18n.tc('words.cluster')) - expect(data[0][1]).toBe(i18n.tc('words.revenue')) - for (let i = 0; i < financialData.length; i++) { - expect(financialData[i].name).toEqual(data[i + 1][0]) - expect(financialData[i].totalRevenue).toEqual(data[i + 1][1]) - } - }) - it('should get formatted Column chart data for MiniGrids', async () => { - const financialData = await clusterService.getClusterCitiesRevenue( - 12, - 'monthly', + }) + } + }) + it("should get formatted Line chart data for Cluster Mini Grids", async () => { + const financialData = await clusterService.getClusterCitiesRevenue( + 12, + "monthly", + ) + const data = clusterService.lineChartData(false) + expect(data.length).not.toBe(0) + expect(data[0][0]).toBe(i18n.tc("words.period")) + for (let i = 0; i < financialData.length; i++) { + expect(financialData[i].name).toEqual(data[0][i + 1]) + Object.keys(financialData[i].period).forEach(function (item, index) { + expect(financialData[i].period[item].revenue).toEqual( + data[index + 1][i + 1], ) - const data = clusterService.columnChartData(false, 'miniGrid') - expect(data[0][0]).toBe(i18n.tc('words.miniGrid')) - expect(data[0][1]).toBe(i18n.tc('words.revenue')) - for (let i = 0; i < financialData.length; i++) { - expect(financialData[i].name).toEqual(data[i + 1][0]) - expect(financialData[i].totalRevenue).toEqual(data[i + 1][1]) - } - }) + }) + } + }) +}) +describe("ClusterService #columnChartData", () => { + it("should get formatted Column Chart Data for Clusters", async () => { + const financialData = await clusterService.getAllRevenues("monthly") + const data = clusterService.columnChartData(false, "cluster") + expect(data.length).not.toBe(0) + expect(financialData.length).toEqual(data.length - 1) + expect(data[0][0]).toBe(i18n.tc("words.cluster")) + expect(data[0][1]).toBe(i18n.tc("words.revenue")) + for (let i = 0; i < financialData.length; i++) { + expect(financialData[i].name).toEqual(data[i + 1][0]) + expect(financialData[i].totalRevenue).toEqual(data[i + 1][1]) + } + }) + it("should get formatted Column chart data for MiniGrids", async () => { + const financialData = await clusterService.getClusterCitiesRevenue( + 12, + "monthly", + ) + const data = clusterService.columnChartData(false, "miniGrid") + expect(data[0][0]).toBe(i18n.tc("words.miniGrid")) + expect(data[0][1]).toBe(i18n.tc("words.revenue")) + for (let i = 0; i < financialData.length; i++) { + expect(financialData[i].name).toEqual(data[i + 1][0]) + expect(financialData[i].totalRevenue).toEqual(data[i + 1][1]) + } + }) }) -describe('CLusterService #getClusterTrends', () => { - it('should get cluster revenue trends data', async () => { - const trendsData = await clusterService.getClusterTrends() - expect(clusterService.trendChartData.length).not.toEqual(0) - expect(Object.keys(trendsData).length).toEqual( - clusterService.trendChartData.base[0].length - 1, - ) - }) - it('should get cluster trends data with right properties', async () => { - const trendsData = await clusterService.getClusterTrends() - Object.keys(trendsData).forEach(function (item, index) { - expect(item).toEqual( - clusterService.trendChartData.base[0][index + 1], - ) - }) +describe("CLusterService #getClusterTrends", () => { + it("should get cluster revenue trends data", async () => { + const trendsData = await clusterService.getClusterTrends() + expect(clusterService.trendChartData.length).not.toEqual(0) + expect(Object.keys(trendsData).length).toEqual( + clusterService.trendChartData.base[0].length - 1, + ) + }) + it("should get cluster trends data with right properties", async () => { + const trendsData = await clusterService.getClusterTrends() + Object.keys(trendsData).forEach(function (item, index) { + expect(item).toEqual(clusterService.trendChartData.base[0][index + 1]) }) - it('should get right cluster trends revenue data', async () => { - const trendsData = await clusterService.getClusterTrends() - Object.keys(trendsData).forEach(function (item, index) { - Object.keys(trendsData[item]).forEach(function (it, ind) { - expect(trendsData[item][it]).toEqual( - clusterService.trendChartData.base[ind + 1][index + 1], - ) - }) - }) + }) + it("should get right cluster trends revenue data", async () => { + const trendsData = await clusterService.getClusterTrends() + Object.keys(trendsData).forEach(function (item, index) { + Object.keys(trendsData[item]).forEach(function (it, ind) { + expect(trendsData[item][it]).toEqual( + clusterService.trendChartData.base[ind + 1][index + 1], + ) + }) }) + }) }) diff --git a/Website/ui/src/__tests__/MainSettingsService.test.js b/Website/ui/src/__tests__/MainSettingsService.test.js index da719c7b2..55d6fff4b 100644 --- a/Website/ui/src/__tests__/MainSettingsService.test.js +++ b/Website/ui/src/__tests__/MainSettingsService.test.js @@ -1,53 +1,53 @@ -jest.mock('../repositories/MainSettingsRepository') -import { MainSettingsService } from '../services/MainSettingsService' +jest.mock("../repositories/MainSettingsRepository") +import { MainSettingsService } from "../services/MainSettingsService" const mainSettings = new MainSettingsService() const mainSettingsProperties = [ - 'id', - 'siteTitle', - 'companyName', - 'currency', - 'country', - 'language', - 'vatEnergy', - 'vatAppliance', + "id", + "siteTitle", + "companyName", + "currency", + "country", + "language", + "vatEnergy", + "vatAppliance", ] -describe('MainSettingsService #List', () => { - beforeEach(() => { - jest.setTimeout(10000) +describe("MainSettingsService #List", () => { + beforeEach(() => { + jest.setTimeout(10000) + }) + it("should get main settings data", async () => { + const data = await mainSettings.list() + expect(Object.keys(data).length).toEqual(8) + }) + it("should list main settings data with these properties", async () => { + const data = await mainSettings.list() + Object.keys(data).forEach(function (item, index) { + expect(item).toEqual(mainSettingsProperties[index]) }) - it('should get main settings data', async () => { - const data = await mainSettings.list() - expect(Object.keys(data).length).toEqual(8) - }) - it('should list main settings data with these properties', async () => { - const data = await mainSettings.list() - Object.keys(data).forEach(function (item, index) { - expect(item).toEqual(mainSettingsProperties[index]) - }) - }) - it('should not get null or undefined Main Settings data', async () => { - const data = await mainSettings.list() - Object.keys(data).forEach(function (item) { - expect(data[item]).not.toBeNull() - expect(data[item]).not.toEqual('') - }) + }) + it("should not get null or undefined Main Settings data", async () => { + const data = await mainSettings.list() + Object.keys(data).forEach(function (item) { + expect(data[item]).not.toBeNull() + expect(data[item]).not.toEqual("") }) + }) }) -describe('MainSettingsService #Update', () => { - const mainSettingsUpdateData = require('./TestData/mainSettingsUpdate.json') - mainSettings.mainSettings = mainSettingsUpdateData - it('should update main settings successfully', async () => { - const data = await mainSettings.update() - Object.keys(data).forEach(function (item) { - expect(data[item]).toEqual(mainSettings.mainSettings[item]) - }) +describe("MainSettingsService #Update", () => { + const mainSettingsUpdateData = require("./TestData/mainSettingsUpdate.json") + mainSettings.mainSettings = mainSettingsUpdateData + it("should update main settings successfully", async () => { + const data = await mainSettings.update() + Object.keys(data).forEach(function (item) { + expect(data[item]).toEqual(mainSettings.mainSettings[item]) }) - it('should create when no data found on database', async () => { - const data = await mainSettings.update() - Object.keys(data).forEach(function (item) { - expect(data[item]).not.toBeUndefined() - expect(data[item]).not.toEqual('') - expect(data[item]).not.toBeNull() - }) + }) + it("should create when no data found on database", async () => { + const data = await mainSettings.update() + Object.keys(data).forEach(function (item) { + expect(data[item]).not.toBeUndefined() + expect(data[item]).not.toEqual("") + expect(data[item]).not.toBeNull() }) + }) }) diff --git a/Website/ui/src/__tests__/MapSettingsService.test.js b/Website/ui/src/__tests__/MapSettingsService.test.js index a283eb9fc..2ed38ce65 100644 --- a/Website/ui/src/__tests__/MapSettingsService.test.js +++ b/Website/ui/src/__tests__/MapSettingsService.test.js @@ -1,42 +1,42 @@ -jest.mock('../repositories/MapSettingsRepository') -import { MapSettingsService } from '../services/MapSettingsService' +jest.mock("../repositories/MapSettingsRepository") +import { MapSettingsService } from "../services/MapSettingsService" const mapSettingsService = new MapSettingsService() -const mapSettingsProperties = ['id', 'zoom', 'latitude', 'longitude'] +const mapSettingsProperties = ["id", "zoom", "latitude", "longitude"] -describe('MapSettingsService #list', function () { - it('should get map settings data', async () => { - const data = await mapSettingsService.list() - expect(Object.keys(data).length).not.toEqual(0) +describe("MapSettingsService #list", function () { + it("should get map settings data", async () => { + const data = await mapSettingsService.list() + expect(Object.keys(data).length).not.toEqual(0) + }) + it("should get map settings data with correct properties", async () => { + const data = await mapSettingsService.list() + Object.keys(data).forEach(function (item, index) { + expect(item).toEqual(mapSettingsProperties[index]) }) - it('should get map settings data with correct properties', async () => { - const data = await mapSettingsService.list() - Object.keys(data).forEach(function (item, index) { - expect(item).toEqual(mapSettingsProperties[index]) - }) - }) - it('should not get null or undefined map settigs data', async () => { - const data = await mapSettingsService.list() - Object.keys(data).forEach(function (item) { - expect(data[item]).not.toBeNull() - expect(data[item]).not.toBeUndefined() - }) + }) + it("should not get null or undefined map settigs data", async () => { + const data = await mapSettingsService.list() + Object.keys(data).forEach(function (item) { + expect(data[item]).not.toBeNull() + expect(data[item]).not.toBeUndefined() }) + }) }) -describe('MapSettingsService #update', () => { - const mapSettingsUpdateData = require('./TestData/mapSettingsUpdate.json') - mapSettingsService.mapSettings = mapSettingsUpdateData - it('should update Map Settings data successfully', async () => { - const data = await mapSettingsService.update() - Object.keys(data).forEach(function (item) { - expect(data[item]).toEqual(mapSettingsService.mapSettings[item]) - }) +describe("MapSettingsService #update", () => { + const mapSettingsUpdateData = require("./TestData/mapSettingsUpdate.json") + mapSettingsService.mapSettings = mapSettingsUpdateData + it("should update Map Settings data successfully", async () => { + const data = await mapSettingsService.update() + Object.keys(data).forEach(function (item) { + expect(data[item]).toEqual(mapSettingsService.mapSettings[item]) }) - it('should create when no data found on database', async () => { - const data = await mapSettingsService.update() - Object.keys(data).forEach(function (item) { - expect(data[item]).not.toBeUndefined() - expect(data[item]).not.toEqual('') - expect(data[item]).not.toBeNull() - }) + }) + it("should create when no data found on database", async () => { + const data = await mapSettingsService.update() + Object.keys(data).forEach(function (item) { + expect(data[item]).not.toBeUndefined() + expect(data[item]).not.toEqual("") + expect(data[item]).not.toBeNull() }) + }) }) diff --git a/Website/ui/src/__tests__/MiniGridService.test.js b/Website/ui/src/__tests__/MiniGridService.test.js index 1b5fa0ed8..0639b0c23 100644 --- a/Website/ui/src/__tests__/MiniGridService.test.js +++ b/Website/ui/src/__tests__/MiniGridService.test.js @@ -1,48 +1,48 @@ -jest.mock('../repositories/MiniGridRepository') -import { MiniGridService } from '../services/MiniGridService' +jest.mock("../repositories/MiniGridRepository") +import { MiniGridService } from "../services/MiniGridService" const miniGridService = new MiniGridService() const miniGridProperties = [ - 'id', - 'cluster_id', - 'name', - 'created_at', - 'updated_at', - 'data_stream', + "id", + "cluster_id", + "name", + "created_at", + "updated_at", + "data_stream", ] -describe('MiniGridService #getMiniGrids', () => { - beforeEach(() => { - jest.setTimeout(10000) +describe("MiniGridService #getMiniGrids", () => { + beforeEach(() => { + jest.setTimeout(10000) + }) + it("should get miniGrids data", async () => { + const data = await miniGridService.getMiniGrids() + expect(Object.keys(data[0]).length).toEqual(6) + }) + it("should list miniGrids data with these properties", async () => { + const data = await miniGridService.getMiniGrids() + Object.keys(data[0]).forEach(function (item, index) { + expect(item).toEqual(miniGridProperties[index]) }) - it('should get miniGrids data', async () => { - const data = await miniGridService.getMiniGrids() - expect(Object.keys(data[0]).length).toEqual(6) - }) - it('should list miniGrids data with these properties', async () => { - const data = await miniGridService.getMiniGrids() - Object.keys(data[0]).forEach(function (item, index) { - expect(item).toEqual(miniGridProperties[index]) - }) - }) - it('should not have null data', async () => { - const data = await miniGridService.getMiniGrids() - Object.keys(data).forEach(function (item) { - expect(data[item]).not.toBeNull() - expect(data[item]).not.toEqual('') - }) + }) + it("should not have null data", async () => { + const data = await miniGridService.getMiniGrids() + Object.keys(data).forEach(function (item) { + expect(data[item]).not.toBeNull() + expect(data[item]).not.toEqual("") }) + }) }) -describe('MiniGridService #createMiniGrid', () => { - it('should create new miniGrid successfully', async () => { - const testData = require('./TestData/miniGridCreate.json') - const data = await miniGridService.createMiniGrid( - testData.name, - testData.cluster_id, - testData.geo_data, - ) - expect(data).toHaveProperty('id') - expect(data.id).not.toBeNull() - expect(data.id).not.toBeUndefined() - }) +describe("MiniGridService #createMiniGrid", () => { + it("should create new miniGrid successfully", async () => { + const testData = require("./TestData/miniGridCreate.json") + const data = await miniGridService.createMiniGrid( + testData.name, + testData.cluster_id, + testData.geo_data, + ) + expect(data).toHaveProperty("id") + expect(data.id).not.toBeNull() + expect(data.id).not.toBeUndefined() + }) }) diff --git a/Website/ui/src/__tests__/PaymentService.test.js b/Website/ui/src/__tests__/PaymentService.test.js index 6cfd39dfc..5ce9f51dd 100644 --- a/Website/ui/src/__tests__/PaymentService.test.js +++ b/Website/ui/src/__tests__/PaymentService.test.js @@ -1,45 +1,45 @@ -jest.mock('../repositories/PaymentHistoryRepository') -import { PaymentService } from '../services/PaymentService' +jest.mock("../repositories/PaymentHistoryRepository") +import { PaymentService } from "../services/PaymentService" const paymentService = new PaymentService() -describe('PaymentService #getPaymentFlow', () => { - it('should get Payment Flow chart data', async () => { - const data = await paymentService.getPaymentFlow() - expect(data.length).not.toEqual(0) - }) +describe("PaymentService #getPaymentFlow", () => { + it("should get Payment Flow chart data", async () => { + const data = await paymentService.getPaymentFlow() + expect(data.length).not.toEqual(0) + }) }) -describe('PaymentService #fillPaymentFlowChartData', () => { - it('should get right formatted data for payment flow chart', async () => { - const data = await paymentService.getPaymentFlow() // getPaymentFlow method is call fillPaymentFlowChartData method - for (let i = 0; i < data.length; i++) { - expect(data[i]).toEqual(paymentService.chartData[i + 1][1]) - } - }) +describe("PaymentService #fillPaymentFlowChartData", () => { + it("should get right formatted data for payment flow chart", async () => { + const data = await paymentService.getPaymentFlow() // getPaymentFlow method is call fillPaymentFlowChartData method + for (let i = 0; i < data.length; i++) { + expect(data[i]).toEqual(paymentService.chartData[i + 1][1]) + } + }) }) -describe('PaymentService #getPaymentDetail', () => { - it('should get Payment Overview Chart Data', async () => { - const data = await paymentService.getPaymentDetail() - expect(data.length).not.toEqual(0) - }) +describe("PaymentService #getPaymentDetail", () => { + it("should get Payment Overview Chart Data", async () => { + const data = await paymentService.getPaymentDetail() + expect(data.length).not.toEqual(0) + }) }) -describe('PaymentService #fillPaymentDetailChartData', () => { - it('should get right formatted data for payment overview chart', async () => { - const data = await paymentService.getPaymentDetail() // getPaymentDetail Method is call fillPaymentDetailChartData method - Object.keys(data).forEach(function (item, index) { - Object.keys(data[item]).forEach(function (sub) { - if (sub === 'Energy') - expect(data[item][sub]).toEqual( - paymentService.paymentDetailData[index + 1][1], - ) - if (sub === 'Access Rate') - expect(data[item][sub]).toEqual( - paymentService.paymentDetailData[index + 1][2], - ) - if (sub === 'Loan Rate') - expect(data[item][sub]).toEqual( - paymentService.paymentDetailData[index + 1][3], - ) - }) - }) +describe("PaymentService #fillPaymentDetailChartData", () => { + it("should get right formatted data for payment overview chart", async () => { + const data = await paymentService.getPaymentDetail() // getPaymentDetail Method is call fillPaymentDetailChartData method + Object.keys(data).forEach(function (item, index) { + Object.keys(data[item]).forEach(function (sub) { + if (sub === "Energy") + expect(data[item][sub]).toEqual( + paymentService.paymentDetailData[index + 1][1], + ) + if (sub === "Access Rate") + expect(data[item][sub]).toEqual( + paymentService.paymentDetailData[index + 1][2], + ) + if (sub === "Loan Rate") + expect(data[item][sub]).toEqual( + paymentService.paymentDetailData[index + 1][3], + ) + }) }) + }) }) diff --git a/Website/ui/src/__tests__/RevenueService.test.js b/Website/ui/src/__tests__/RevenueService.test.js index c984ecbc9..887f158e0 100644 --- a/Website/ui/src/__tests__/RevenueService.test.js +++ b/Website/ui/src/__tests__/RevenueService.test.js @@ -1,67 +1,63 @@ -jest.mock('../repositories/RevenueRepository') -import { RevenueService } from '../services/RevenueService' +jest.mock("../repositories/RevenueRepository") +import { RevenueService } from "../services/RevenueService" const revenueService = new RevenueService() -describe('RevenueService #getTicketsData', () => { - it('should get tickets categories for chart', async () => { - const data = await revenueService.getTicketsData() - expect(revenueService.openedTicketChartData[0].length).toEqual( - data.categories.length * 2 + 1, - ) - }) - it('should get open and closed tickets data for tickets trend chart', async () => { - const data = await revenueService.getTicketsData() - Object.keys(data).forEach(function (item, index) { - if (item !== 'categories') { - Object.keys(data[item]).forEach(function (sub, i) { - expect(data[item][sub]['opened']).toEqual( - revenueService.openedTicketChartData[index * 2 - 1][ - i * 2 + 1 - ], - ) - expect(data[item][sub]['closed']).toEqual( - revenueService.openedTicketChartData[index * 2][ - i * 2 + 1 - ], - ) - }) - } +describe("RevenueService #getTicketsData", () => { + it("should get tickets categories for chart", async () => { + const data = await revenueService.getTicketsData() + expect(revenueService.openedTicketChartData[0].length).toEqual( + data.categories.length * 2 + 1, + ) + }) + it("should get open and closed tickets data for tickets trend chart", async () => { + const data = await revenueService.getTicketsData() + Object.keys(data).forEach(function (item, index) { + if (item !== "categories") { + Object.keys(data[item]).forEach(function (sub, i) { + expect(data[item][sub]["opened"]).toEqual( + revenueService.openedTicketChartData[index * 2 - 1][i * 2 + 1], + ) + expect(data[item][sub]["closed"]).toEqual( + revenueService.openedTicketChartData[index * 2][i * 2 + 1], + ) }) + } }) + }) }) -describe('RevenueService #getMiniGridRevenueTrends', () => { - it('should get revenue trends for specific mini grid', async () => { - const revenueData = await revenueService.getMiniGridRevenueTrends() - expect(Object.keys(revenueData).length).not.toEqual(0) - }) +describe("RevenueService #getMiniGridRevenueTrends", () => { + it("should get revenue trends for specific mini grid", async () => { + const revenueData = await revenueService.getMiniGridRevenueTrends() + expect(Object.keys(revenueData).length).not.toEqual(0) + }) }) -describe('RevenueService #fillRevenueTrendsOverView', () => { - it('should get formatted data for revenue trend overview chart', async () => { - const revenueData = await revenueService.getMiniGridRevenueTrends() - const chartData = revenueService.fillRevenueTrendsOverView() - Object.keys(revenueData).forEach(function (item, index) { - expect(item).toEqual(chartData[index + 1][0]) - Object.keys(revenueData[item]).forEach(function (sub, i) { - expect(sub).toEqual(chartData[0][i + 1]) - expect(revenueData[item][sub]['revenue']).toEqual( - chartData[index + 1][i + 1], - ) - }) - }) +describe("RevenueService #fillRevenueTrendsOverView", () => { + it("should get formatted data for revenue trend overview chart", async () => { + const revenueData = await revenueService.getMiniGridRevenueTrends() + const chartData = revenueService.fillRevenueTrendsOverView() + Object.keys(revenueData).forEach(function (item, index) { + expect(item).toEqual(chartData[index + 1][0]) + Object.keys(revenueData[item]).forEach(function (sub, i) { + expect(sub).toEqual(chartData[0][i + 1]) + expect(revenueData[item][sub]["revenue"]).toEqual( + chartData[index + 1][i + 1], + ) + }) }) + }) }) -describe('RevenueService #fillRevenueTrends', () => { - it('should get formatted data for revenue trends chart ', async () => { - const revenueData = await revenueService.getMiniGridRevenueTrends() - const chartData = revenueService.fillRevenueTrends('monthly') - Object.keys(revenueData).forEach(function (item, index) { - expect(item).toEqual(chartData[index + 1][0]) - Object.keys(revenueData[item]).forEach(function (sub, i) { - expect(sub).toEqual(chartData[0][i + 1]) - expect(revenueData[item][sub]['revenue']).toEqual( - chartData[index + 1][i + 1], - ) - }) - }) +describe("RevenueService #fillRevenueTrends", () => { + it("should get formatted data for revenue trends chart ", async () => { + const revenueData = await revenueService.getMiniGridRevenueTrends() + const chartData = revenueService.fillRevenueTrends("monthly") + Object.keys(revenueData).forEach(function (item, index) { + expect(item).toEqual(chartData[index + 1][0]) + Object.keys(revenueData[item]).forEach(function (sub, i) { + expect(sub).toEqual(chartData[0][i + 1]) + expect(revenueData[item][sub]["revenue"]).toEqual( + chartData[index + 1][i + 1], + ) + }) }) + }) }) diff --git a/Website/ui/src/__tests__/TargetService.test.js b/Website/ui/src/__tests__/TargetService.test.js index 3d6b6b63c..b45d4090f 100644 --- a/Website/ui/src/__tests__/TargetService.test.js +++ b/Website/ui/src/__tests__/TargetService.test.js @@ -1,11 +1,11 @@ -jest.mock('../repositories/TargetRepository') -import { Targets } from '@/services/TargetService' +jest.mock("../repositories/TargetRepository") +import { Targets } from "@/services/TargetService" const targets = new Targets() -describe('TargetsService #store', () => { - it('should create a new target successfully ', async () => { - const testData = require('./TestData/targetCreate.json') - const data = await targets.store(testData) - expect(data.data.id).toEqual(testData.targetId) - }) +describe("TargetsService #store", () => { + it("should create a new target successfully ", async () => { + const testData = require("./TestData/targetCreate.json") + const data = await targets.store(testData) + expect(data.data.id).toEqual(testData.targetId) + }) }) diff --git a/Website/ui/src/__tests__/TariffService.test.js b/Website/ui/src/__tests__/TariffService.test.js index b1b05639d..d5e63dd32 100644 --- a/Website/ui/src/__tests__/TariffService.test.js +++ b/Website/ui/src/__tests__/TariffService.test.js @@ -1,58 +1,58 @@ -jest.mock('../repositories/TariffRepository') -import { TariffService } from '../services/TariffService' +jest.mock("../repositories/TariffRepository") +import { TariffService } from "../services/TariffService" const tariffService = new TariffService() const tariffProperties = [ - 'id', - 'name', - 'price', - 'currency', - 'factor', - 'accessRate', - 'socialTariff', - 'components', - 'tous', + "id", + "name", + "price", + "currency", + "factor", + "accessRate", + "socialTariff", + "components", + "tous", ] -describe('TariffService #getTariffs', () => { - it('should get tariffs data', async () => { - const data = await tariffService.getTariffs() - expect(Object.keys(data[0]).length).toEqual(9) +describe("TariffService #getTariffs", () => { + it("should get tariffs data", async () => { + const data = await tariffService.getTariffs() + expect(Object.keys(data[0]).length).toEqual(9) + }) + it("should list tariffs data with these properties", async () => { + const data = await tariffService.getTariffs() + Object.keys(data[0]).forEach(function (item, index) { + expect(item).toEqual(tariffProperties[index]) }) - it('should list tariffs data with these properties', async () => { - const data = await tariffService.getTariffs() - Object.keys(data[0]).forEach(function (item, index) { - expect(item).toEqual(tariffProperties[index]) - }) - }) - it('should not have null data', async () => { - const data = await tariffService.getTariffs() - Object.keys(data).forEach(function (item) { - expect(data[item]).not.toBeNull() - expect(data[item]).not.toEqual('') - }) + }) + it("should not have null data", async () => { + const data = await tariffService.getTariffs() + Object.keys(data).forEach(function (item) { + expect(data[item]).not.toBeNull() + expect(data[item]).not.toEqual("") }) + }) }) -describe('TariffService #saveTariff', () => { - const testData = require('./TestData/tariffCreate.json') - tariffService.tariff.name = testData.name - tariffService.tariff.price = testData.price - tariffService.currency = testData.currency - tariffService.tariff.factor = testData.factor - tariffService.tariff.components = testData.components - tariffService.tariff.accessRate = testData.accessRate - tariffService.tariff.tous = testData.tous - it('should create new tariff when method is create', async () => { - const method = 'create' - const data = await tariffService.saveTariff(method) - expect(data.id).toEqual(tariffService.tariff.id) - expect(data.id).not.toBeNull() - expect(data.id).not.toBeUndefined() - }) - it('should update tariff when method is update', async () => { - const method = 'update' - const data = await tariffService.saveTariff(method) - expect(data.id).toEqual(tariffService.tariff.id) - expect(data.id).not.toBeNull() - expect(data.id).not.toBeUndefined() - }) +describe("TariffService #saveTariff", () => { + const testData = require("./TestData/tariffCreate.json") + tariffService.tariff.name = testData.name + tariffService.tariff.price = testData.price + tariffService.currency = testData.currency + tariffService.tariff.factor = testData.factor + tariffService.tariff.components = testData.components + tariffService.tariff.accessRate = testData.accessRate + tariffService.tariff.tous = testData.tous + it("should create new tariff when method is create", async () => { + const method = "create" + const data = await tariffService.saveTariff(method) + expect(data.id).toEqual(tariffService.tariff.id) + expect(data.id).not.toBeNull() + expect(data.id).not.toBeUndefined() + }) + it("should update tariff when method is update", async () => { + const method = "update" + const data = await tariffService.saveTariff(method) + expect(data.id).toEqual(tariffService.tariff.id) + expect(data.id).not.toBeNull() + expect(data.id).not.toBeUndefined() + }) }) diff --git a/Website/ui/src/__tests__/TestData/agentCreate.json b/Website/ui/src/__tests__/TestData/agentCreate.json index 926a1c6af..0a204e45d 100644 --- a/Website/ui/src/__tests__/TestData/agentCreate.json +++ b/Website/ui/src/__tests__/TestData/agentCreate.json @@ -1,20 +1,20 @@ { - "id": 3, - "personId": 5388, - "miniGrid": null, - "miniGridId": 1, - "password": "123123", - "nationality": null, - "deviceId": null, - "name": "Test Name", - "email": "test123@test.com", - "balance": null, - "commissionRevenue": null, - "dueToEnergySupplier": null, - "phone": "123123123", - "gender": "male", - "birthday": "2021-04-03T21:00:00.000Z", - "commissionType": null, - "commissionTypeId": 1, - "surname": "Test Surname" + "id": 3, + "personId": 5388, + "miniGrid": null, + "miniGridId": 1, + "password": "123123", + "nationality": null, + "deviceId": null, + "name": "Test Name", + "email": "test123@test.com", + "balance": null, + "commissionRevenue": null, + "dueToEnergySupplier": null, + "phone": "123123123", + "gender": "male", + "birthday": "2021-04-03T21:00:00.000Z", + "commissionType": null, + "commissionTypeId": 1, + "surname": "Test Surname" } diff --git a/Website/ui/src/__tests__/TestData/agentUpdate.json b/Website/ui/src/__tests__/TestData/agentUpdate.json index 8c6771d66..e7f464acc 100644 --- a/Website/ui/src/__tests__/TestData/agentUpdate.json +++ b/Website/ui/src/__tests__/TestData/agentUpdate.json @@ -1,16 +1,16 @@ { - "id": 3, - "personId": 5388, - "miniGrid": "Mafia", - "name": "testName", - "surname": "tests", - "email": "demo3@inensus.com", - "balance": 0, - "gender": "female", - "phone": "+90666", - "birthday": "2000-01-02", - "commissionType": "Basic Commission", - "commissionRevenue": 0, - "commissionTypeId": 1, - "dueToEnergySupplier": 0 + "id": 3, + "personId": 5388, + "miniGrid": "Mafia", + "name": "testName", + "surname": "tests", + "email": "demo3@inensus.com", + "balance": 0, + "gender": "female", + "phone": "+90666", + "birthday": "2000-01-02", + "commissionType": "Basic Commission", + "commissionRevenue": 0, + "commissionTypeId": 1, + "dueToEnergySupplier": 0 } diff --git a/Website/ui/src/__tests__/TestData/cityCreate.json b/Website/ui/src/__tests__/TestData/cityCreate.json index 7e32330f8..8439b61c7 100644 --- a/Website/ui/src/__tests__/TestData/cityCreate.json +++ b/Website/ui/src/__tests__/TestData/cityCreate.json @@ -1,34 +1,34 @@ { - "name": "test", - "cluster_id": 21, - "mini_grid_id": 14, - "geo_data": [ - { - "id": 21, - "name": "test", - "manager_id": 25, - "created_at": "2021-03-30T11:30:50.000000Z", - "updated_at": "2021-03-30T11:30:50.000000Z", - "geo": { - "leaflet_id": 591, - "type": "manual", - "geojson": { - "type": "Polygon", - "coordinates": [ - [ - [-2.757747489855385, 35.5050327117256], - [-3.173167972262269, 36.2099593632781], - [-2.5175906170179476, 36.235234933848794] - ] - ] - }, - "searched": false, - "display_name": "test", - "selected": true, - "draw_type": "draw", - "lat": -2.8161686930452006, - "lon": 35.98340900295083 - } - } - ] + "name": "test", + "cluster_id": 21, + "mini_grid_id": 14, + "geo_data": [ + { + "id": 21, + "name": "test", + "manager_id": 25, + "created_at": "2021-03-30T11:30:50.000000Z", + "updated_at": "2021-03-30T11:30:50.000000Z", + "geo": { + "leaflet_id": 591, + "type": "manual", + "geojson": { + "type": "Polygon", + "coordinates": [ + [ + [-2.757747489855385, 35.5050327117256], + [-3.173167972262269, 36.2099593632781], + [-2.5175906170179476, 36.235234933848794] + ] + ] + }, + "searched": false, + "display_name": "test", + "selected": true, + "draw_type": "draw", + "lat": -2.8161686930452006, + "lon": 35.98340900295083 + } + } + ] } diff --git a/Website/ui/src/__tests__/TestData/clusterCreate.json b/Website/ui/src/__tests__/TestData/clusterCreate.json index c87f5f051..03bfb113f 100644 --- a/Website/ui/src/__tests__/TestData/clusterCreate.json +++ b/Website/ui/src/__tests__/TestData/clusterCreate.json @@ -1,24 +1,24 @@ { - "geoData": { - "display_name": "test", - "draw_type": "draw", - "geojson": { - "coordinates": [ - [-1.1553744185139059, 36.15194141521097], - [-1.932926590026594, 35.898198717784155], - [-1.8983561543640837, 37.846606198583515], - [-1.0556577358915145, 37.87346953844301] - ], - "type": "Polygon" - }, - "lat": -1.5105787246990245, - "leaflet_id": 316, - "lon": 36.94255396750541, - "searched": false, - "selected": true, - "type": "manual" + "geoData": { + "display_name": "test", + "draw_type": "draw", + "geojson": { + "coordinates": [ + [-1.1553744185139059, 36.15194141521097], + [-1.932926590026594, 35.898198717784155], + [-1.8983561543640837, 37.846606198583515], + [-1.0556577358915145, 37.87346953844301] + ], + "type": "Polygon" }, - "geo_type": "manuel", - "manager_id": 25, - "name": "test" + "lat": -1.5105787246990245, + "leaflet_id": 316, + "lon": 36.94255396750541, + "searched": false, + "selected": true, + "type": "manual" + }, + "geo_type": "manuel", + "manager_id": 25, + "name": "test" } diff --git a/Website/ui/src/__tests__/TestData/mainSettingsUpdate.json b/Website/ui/src/__tests__/TestData/mainSettingsUpdate.json index 4942b7e6e..b290df888 100644 --- a/Website/ui/src/__tests__/TestData/mainSettingsUpdate.json +++ b/Website/ui/src/__tests__/TestData/mainSettingsUpdate.json @@ -1,9 +1,9 @@ { - "siteTitle": "Demo Site", - "companyName": "Demo Company", - "currency": "$", - "country": "Germany", - "language": "en", - "vatEnergy": 1, - "vatAppliance": 18 + "siteTitle": "Demo Site", + "companyName": "Demo Company", + "currency": "$", + "country": "Germany", + "language": "en", + "vatEnergy": 1, + "vatAppliance": 18 } diff --git a/Website/ui/src/__tests__/TestData/maintenanceTicketCreate.json b/Website/ui/src/__tests__/TestData/maintenanceTicketCreate.json index 6964e8498..5d65fee4e 100644 --- a/Website/ui/src/__tests__/TestData/maintenanceTicketCreate.json +++ b/Website/ui/src/__tests__/TestData/maintenanceTicketCreate.json @@ -1,15 +1,15 @@ { - "customer_type": "maintenance", - "name": null, - "surname": null, - "phone": null, - "city_id": null, - "mini_grid_id": null, - "sex": "male", - "creator": 22, - "title": "test", - "category": 18, - "assigned": 1065, - "amount": "123", - "description": "test" + "customer_type": "maintenance", + "name": null, + "surname": null, + "phone": null, + "city_id": null, + "mini_grid_id": null, + "sex": "male", + "creator": 22, + "title": "test", + "category": 18, + "assigned": 1065, + "amount": "123", + "description": "test" } diff --git a/Website/ui/src/__tests__/TestData/mapSettingsUpdate.json b/Website/ui/src/__tests__/TestData/mapSettingsUpdate.json index 13047c912..8ef960c49 100644 --- a/Website/ui/src/__tests__/TestData/mapSettingsUpdate.json +++ b/Website/ui/src/__tests__/TestData/mapSettingsUpdate.json @@ -1,6 +1,6 @@ { - "id": 1, - "zoom": 7, - "latitude": -2.50038, - "longitude": 32.88906 + "id": 1, + "zoom": 7, + "latitude": -2.50038, + "longitude": 32.88906 } diff --git a/Website/ui/src/__tests__/TestData/miniGridCreate.json b/Website/ui/src/__tests__/TestData/miniGridCreate.json index 4a51357f7..1ae19e6ed 100644 --- a/Website/ui/src/__tests__/TestData/miniGridCreate.json +++ b/Website/ui/src/__tests__/TestData/miniGridCreate.json @@ -1,8 +1,8 @@ { - "cluster_id": 1, - "geo_data": { - "lat": -2.84733, - "lon": 35.93834 - }, - "name": "test" + "cluster_id": 1, + "geo_data": { + "lat": -2.84733, + "lon": 35.93834 + }, + "name": "test" } diff --git a/Website/ui/src/__tests__/TestData/targetCreate.json b/Website/ui/src/__tests__/TestData/targetCreate.json index f9cde105b..ae6fa4cc7 100644 --- a/Website/ui/src/__tests__/TestData/targetCreate.json +++ b/Website/ui/src/__tests__/TestData/targetCreate.json @@ -1,271 +1,271 @@ { - "period": "2021-03-30T21:00:00.000Z", - "targetType": "cluster", - "targetId": 14, - "data": [ - { - "id": 1, - "name": "Household", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 2, - "name": "Community", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 3, - "name": "Cafeterias and Pubs", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 4, - "name": "Hair Dressers ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 5, - "name": "Churches & Mosques ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 6, - "name": "Solar Excess ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 7, - "name": "H.H Cus ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 8, - "name": "FOOD AND BEVERAGES ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 9, - "name": "SHOPS w", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 10, - "name": "SCHOOLS ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 11, - "name": "HEALTH CENTRES & INSTITUTIONS ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 12, - "name": "GUEST HOUSES ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 13, - "name": "ENTERTAINMENT CENTRES ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 14, - "name": "Mobile Charging, OFFICES and Stationery ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 15, - "name": "Small scale HATCHERIES ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 16, - "name": "Laundry ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 17, - "name": "Freezing Units ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 18, - "name": "Wood work ", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 19, - "name": "Mills", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 20, - "name": "Welders", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 21, - "name": "Drinking Water Project", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 22, - "name": "Bakery", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 23, - "name": "Not ordered yet", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - }, - { - "id": 24, - "name": "default connection group", - "target": { - "newConnection": 0, - "totalRevenue": 0, - "connectedPower": 0, - "energyPerMonth": 0, - "averageRevenuePerMonth": 0 - } - } - ] + "period": "2021-03-30T21:00:00.000Z", + "targetType": "cluster", + "targetId": 14, + "data": [ + { + "id": 1, + "name": "Household", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 2, + "name": "Community", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 3, + "name": "Cafeterias and Pubs", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 4, + "name": "Hair Dressers ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 5, + "name": "Churches & Mosques ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 6, + "name": "Solar Excess ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 7, + "name": "H.H Cus ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 8, + "name": "FOOD AND BEVERAGES ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 9, + "name": "SHOPS w", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 10, + "name": "SCHOOLS ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 11, + "name": "HEALTH CENTRES & INSTITUTIONS ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 12, + "name": "GUEST HOUSES ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 13, + "name": "ENTERTAINMENT CENTRES ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 14, + "name": "Mobile Charging, OFFICES and Stationery ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 15, + "name": "Small scale HATCHERIES ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 16, + "name": "Laundry ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 17, + "name": "Freezing Units ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 18, + "name": "Wood work ", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 19, + "name": "Mills", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 20, + "name": "Welders", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 21, + "name": "Drinking Water Project", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 22, + "name": "Bakery", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 23, + "name": "Not ordered yet", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + }, + { + "id": 24, + "name": "default connection group", + "target": { + "newConnection": 0, + "totalRevenue": 0, + "connectedPower": 0, + "energyPerMonth": 0, + "averageRevenuePerMonth": 0 + } + } + ] } diff --git a/Website/ui/src/__tests__/TestData/tariffCreate.json b/Website/ui/src/__tests__/TestData/tariffCreate.json index 9c51b4950..35647881f 100644 --- a/Website/ui/src/__tests__/TestData/tariffCreate.json +++ b/Website/ui/src/__tests__/TestData/tariffCreate.json @@ -1,35 +1,35 @@ { + "id": 1, + "name": "test", + "price": "2", + "currency": null, + "factor": 1, + "accessRate": { "id": 1, - "name": "test", - "price": "2", - "currency": null, - "factor": 1, - "accessRate": { - "id": 1, - "amount": "12", - "period": "23" - }, - "socialTariff": { - "id": 1, - "dailyAllowance": "23", - "price": "23", - "initialEnergyBudget": "2", - "maximumStackedEnergy": "2" - }, - "components": [ - { - "id": -9551523, - "name": "test", - "price": "2" - } - ], - "tous": [ - { - "id": -7512291, - "start": "00:00", - "end": "01:00", - "value": "23", - "cost": 0.0046 - } - ] + "amount": "12", + "period": "23" + }, + "socialTariff": { + "id": 1, + "dailyAllowance": "23", + "price": "23", + "initialEnergyBudget": "2", + "maximumStackedEnergy": "2" + }, + "components": [ + { + "id": -9551523, + "name": "test", + "price": "2" + } + ], + "tous": [ + { + "id": -7512291, + "start": "00:00", + "end": "01:00", + "value": "23", + "cost": 0.0046 + } + ] } diff --git a/Website/ui/src/__tests__/TestData/ticketDetail.json b/Website/ui/src/__tests__/TestData/ticketDetail.json index ccc2bba4f..a35baa0e4 100644 --- a/Website/ui/src/__tests__/TestData/ticketDetail.json +++ b/Website/ui/src/__tests__/TestData/ticketDetail.json @@ -1,37 +1,37 @@ { - "id": 118, - "ticket_id": "60646eff6e453831d355230c", - "creator_id": 22, - "owner_type": "person", - "owner_id": 1065, - "status": 0, - "category_id": 18, - "created_at": "2021-03-31T12:45:51.000000Z", - "updated_at": "2021-03-31T12:45:51.000000Z", - "assigned_id": null, - "creator_type": "admin", - "category": { - "id": 18, - "label_name": "Installing Meters", - "label_color": "purple", - "created_at": "2019-06-26T09:56:53.000000Z", - "updated_at": "2019-06-26T09:56:53.000000Z", - "out_source": 1 - }, - "owner": { - "id": 1065, - "title": null, - "education": null, - "name": "testname", - "surname": "testsurname", - "birth_date": null, - "sex": null, - "nationality": null, - "created_at": "2019-06-22T15:50:04.000000Z", - "updated_at": "2020-03-04T19:59:08.000000Z", - "customer_group_id": null, - "is_customer": 1, - "deleted_at": null - }, - "assigned_to": null + "id": 118, + "ticket_id": "60646eff6e453831d355230c", + "creator_id": 22, + "owner_type": "person", + "owner_id": 1065, + "status": 0, + "category_id": 18, + "created_at": "2021-03-31T12:45:51.000000Z", + "updated_at": "2021-03-31T12:45:51.000000Z", + "assigned_id": null, + "creator_type": "admin", + "category": { + "id": 18, + "label_name": "Installing Meters", + "label_color": "purple", + "created_at": "2019-06-26T09:56:53.000000Z", + "updated_at": "2019-06-26T09:56:53.000000Z", + "out_source": 1 + }, + "owner": { + "id": 1065, + "title": null, + "education": null, + "name": "testname", + "surname": "testsurname", + "birth_date": null, + "sex": null, + "nationality": null, + "created_at": "2019-06-22T15:50:04.000000Z", + "updated_at": "2020-03-04T19:59:08.000000Z", + "customer_group_id": null, + "is_customer": 1, + "deleted_at": null + }, + "assigned_to": null } diff --git a/Website/ui/src/__tests__/TicketService.test.js b/Website/ui/src/__tests__/TicketService.test.js index 587b57560..7096a37c3 100644 --- a/Website/ui/src/__tests__/TicketService.test.js +++ b/Website/ui/src/__tests__/TicketService.test.js @@ -1,13 +1,13 @@ -jest.mock('../repositories/TicketRepository') -import { TicketService } from '../services/TicketService' +jest.mock("../repositories/TicketRepository") +import { TicketService } from "../services/TicketService" const ticketService = new TicketService() -describe('TicketService #createMaintenanceTicket', function () { - it('should create a new maintenance ticket successfully', async () => { - const testData = require('./TestData/maintenanceTicketCreate.json') - const data = await ticketService.createMaintenanceTicket(testData) - expect(data[0]).toHaveProperty('ticket_id') - expect(data[0].ticket_id).not.toBeNull() - expect(data[0].ticket_id).not.toBeUndefined() - }) +describe("TicketService #createMaintenanceTicket", function () { + it("should create a new maintenance ticket successfully", async () => { + const testData = require("./TestData/maintenanceTicketCreate.json") + const data = await ticketService.createMaintenanceTicket(testData) + expect(data[0]).toHaveProperty("ticket_id") + expect(data[0].ticket_id).not.toBeNull() + expect(data[0].ticket_id).not.toBeUndefined() + }) }) diff --git a/Website/ui/src/__tests__/TicketSettingsService.test.js b/Website/ui/src/__tests__/TicketSettingsService.test.js index f2eca1023..8b09df23b 100644 --- a/Website/ui/src/__tests__/TicketSettingsService.test.js +++ b/Website/ui/src/__tests__/TicketSettingsService.test.js @@ -1,24 +1,24 @@ -jest.mock('../repositories/TicketSettingsRepository') -import { TicketSettingsService } from '../services/TicketSettingsService' +jest.mock("../repositories/TicketSettingsRepository") +import { TicketSettingsService } from "../services/TicketSettingsService" const ticketSettings = new TicketSettingsService() -const ticketSettingsProperties = ['id', 'name', 'apiToken', 'apiUrl', 'apiKey'] +const ticketSettingsProperties = ["id", "name", "apiToken", "apiUrl", "apiKey"] -describe('TicketSettingsService #list', () => { - it('should get ticket settings data successfully', async () => { - const data = await ticketSettings.list() - expect(Object.keys(data).length).not.toEqual(0) +describe("TicketSettingsService #list", () => { + it("should get ticket settings data successfully", async () => { + const data = await ticketSettings.list() + expect(Object.keys(data).length).not.toEqual(0) + }) + it("should get ticket settings data with correct properties", async () => { + const data = await ticketSettings.list() + Object.keys(data).forEach(function (item, index) { + expect(item).toEqual(ticketSettingsProperties[index]) }) - it('should get ticket settings data with correct properties', async () => { - const data = await ticketSettings.list() - Object.keys(data).forEach(function (item, index) { - expect(item).toEqual(ticketSettingsProperties[index]) - }) - }) - it('should not get null or undefined data', async () => { - const data = await ticketSettings.list() - Object.keys(data).forEach(function (item) { - expect(data[item]).not.toBeUndefined() - expect(data[item]).not.toBeNull() - }) + }) + it("should not get null or undefined data", async () => { + const data = await ticketSettings.list() + Object.keys(data).forEach(function (item) { + expect(data[item]).not.toBeUndefined() + expect(data[item]).not.toBeNull() }) + }) }) diff --git a/Website/ui/src/__tests__/TicketTrelloService.test.js b/Website/ui/src/__tests__/TicketTrelloService.test.js index 690727de6..4824002d5 100644 --- a/Website/ui/src/__tests__/TicketTrelloService.test.js +++ b/Website/ui/src/__tests__/TicketTrelloService.test.js @@ -1,30 +1,30 @@ -jest.mock('../repositories/TicketTrelloRepository') -import { TicketTrelloService } from '../services/TicketTrelloService' +jest.mock("../repositories/TicketTrelloRepository") +import { TicketTrelloService } from "../services/TicketTrelloService" const ticketTrelloService = new TicketTrelloService() const ticketDataProperties = [ - 'created', - 'id', - 'name', - 'description', - 'due', - 'closed', - 'lastActivity', - 'comments', - 'category', - 'owner', - 'assigned', + "created", + "id", + "name", + "description", + "due", + "closed", + "lastActivity", + "comments", + "category", + "owner", + "assigned", ] -describe('TicketTrelloService #getTicketDetail', function () { - const testData = require('./TestData/ticketDetail.json') - it('should get ticket detail correctly', async () => { - const data = await ticketTrelloService.getTicketDetail(testData) - expect(data.id).toEqual(testData.ticket_id) - }) - it('should get ticket data these properties', async () => { - const data = await ticketTrelloService.getTicketDetail(testData) - Object.keys(data).forEach(function (item, index) { - expect(item).toEqual(ticketDataProperties[index]) - }) +describe("TicketTrelloService #getTicketDetail", function () { + const testData = require("./TestData/ticketDetail.json") + it("should get ticket detail correctly", async () => { + const data = await ticketTrelloService.getTicketDetail(testData) + expect(data.id).toEqual(testData.ticket_id) + }) + it("should get ticket data these properties", async () => { + const data = await ticketTrelloService.getTicketDetail(testData) + Object.keys(data).forEach(function (item, index) { + expect(item).toEqual(ticketDataProperties[index]) }) + }) }) diff --git a/Website/ui/src/__tests__/TransactionService.test.js b/Website/ui/src/__tests__/TransactionService.test.js index 66d32b3b3..571ffc490 100644 --- a/Website/ui/src/__tests__/TransactionService.test.js +++ b/Website/ui/src/__tests__/TransactionService.test.js @@ -1,20 +1,20 @@ -jest.mock('../repositories/TransactionRepository') -import { TransactionService } from '../services/TransactionService' +jest.mock("../repositories/TransactionRepository") +import { TransactionService } from "../services/TransactionService" const transactionService = new TransactionService() -describe('TransactionService #getTransactions', () => { - it('should list transactions successfully', async () => { - const data = await transactionService.getTransactions() - expect(data.length).toBeGreaterThan(0) - }) +describe("TransactionService #getTransactions", () => { + it("should list transactions successfully", async () => { + const data = await transactionService.getTransactions() + expect(data.length).toBeGreaterThan(0) + }) }) -describe('TransactionService #getTransaction', () => { - it('should get detail of transaction correctly', async () => { - const data = await transactionService.getTransaction(96256) - expect(data.id).toEqual(96256) - }) - it('should check payment histories for empty states', async () => { - const data = await transactionService.getTransaction(96256) - expect(data.payment_histories.length).toBeGreaterThan(0) - }) +describe("TransactionService #getTransaction", () => { + it("should get detail of transaction correctly", async () => { + const data = await transactionService.getTransaction(96256) + expect(data.id).toEqual(96256) + }) + it("should check payment histories for empty states", async () => { + const data = await transactionService.getTransaction(96256) + expect(data.payment_histories.length).toBeGreaterThan(0) + }) }) diff --git a/Website/ui/src/assets/locales/bu.json b/Website/ui/src/assets/locales/bu.json index 18046f4df..e21c01a0d 100644 --- a/Website/ui/src/assets/locales/bu.json +++ b/Website/ui/src/assets/locales/bu.json @@ -1,562 +1,562 @@ { - "menu": { - "Agents": "ေအးဂျင်မ့ ျား ", - "Angaza SHS": "Angaza SHS", - "Appliances": "Appliances", - "Asset Types": "ပိုင်ဆိုင်မ6အမျ+ိးအစားများ", - "Bulk Registration": "Bulk Registration", - "Calin Meter": "Calin Meter", - "CalinSmart Meter": "CalinSmart Meter", - "Clusters": "Clusters", - "Connection": "ချတိ ်ဆက်မ6 ", - "Connection Types": "ချတိ ်ဆက်မ6အမျ+ိးအစားများ", - "Customers": "သံုးစဲွသူများ", - "Daly Bms": "Daly BMS", - "Dashboard": "အတိခု ျ+ပ်ေဖာ်ြပချက်", - "E-Bikes": "E-Bikes", - "GomeLong Meter": "GomeLong Meter", - "Kelin Meter": "Kelin Meter", - "Locations": "ေနရာများ", - "Maintenance": "ထိနး်သိမ်းြခင်း ", - "Messages": "Messages", - "Meters": "မီတာ", - "MicroStar Meter": "MicroStar Meter", - "Mini-Grid": "Mini-Grid", - "Mini-Grids": "Mini-Grids", - "Reports": "အစီရင်ခံစာများ", - "Sms": "စာတိမုက်ေစ့ချ", - "Solar Home Systems": "Solar Home Systems", - "Spark Meter": "Spark မီတာ", - "Steamaco Meter": " မီတာ", - "Stron Meter": "Stron Meter", - "SunKing SHS": "SunKing SHS", - "Swifta": "Swifta", - "Targets": "ပစ်မှတ်များ", - "Tariffs": "Jှ+နး်ထားများ", - "Tickets": "ကွနပ်လိနး်များ", - "Transactions": "ေငေွပးေငယွ ူ", - "Viber Messaging": "Viber Messaging", - "Wave Money": "Wave Money", - "Wavecom Payment Provider": "Wavecom Payment Provider", - "subMenu": { - "Agents": "ေအးဂျင်မ့ျား", - "Categories": "အမျ+ိးအစားများ", - "Clusters": "အစုအဖဲFများ", - "Commission Types": "ေကာ်မGှင်အမျ+ိးအစားများ", - "Config": "ပြင်ဆင်မှု", - "Customers": "ေဖာက်သည်များ", - "Groups": "အဖဲFများ", - "List": "စာရင်း", - "Message List": "Message List", - "Meter Models": "မီတာေမာ်ဒယ်များ", - "Meters": "မီတာများ", - "Mini-Grid": "မီနဂီ ရစ်", - "New Message": "Message အသစ်", - "NewSms": "စာတိအုသစ်", - "Overview": "ြခံ+ငံသု ံုးသပ်ချက်", - "Sales Accounts": "အေရာင်းအေကာင်မ့ ျား", - "Settings": "အြပင်အဆင်များ", - "Sites": "ဆိုဒ်များ", - "Sms List": "စာတို စာရင်း", - "Tariffs": "အခွနJ် ှ+နး်", - "Types": "အမျ+ိးအစားများ", - "Users": "အသံုးြပ+သူများ", - "addCluster": "Cluster ထည့်ပါ။", - "addMiniGrid": "MiniGrid ကိုထည့်ပါ။", - "addVillage": "ရွာကိုထည့်ပါ။" - } - }, - "messages": { - "paymentAmountCannotBeLess": "Payment amount cannot be less than {amount}", - "successfullyCreated": "{item} Successfully Created", - "successfullyUpdated": "{item} Successfully Updated" - }, - "phrases": { - "3daysAgo": "လနွ ခ် ဲ့ေသာ ၃ ရက်", - "AppliancePayment": "စက်ပစSည်းေငေွပးေချမ6", - "AppliancePaymentReminder": "စက်ပစSည်းေငေွပးေချမ6သတိေပးချက်", - "Balance Feedback": "လက်ကျန်တUံjြပနခ်ျက်", - "LastTransactionInformationNotFound": "ေနာက်ဆံုးေငေွပးေငယွ ူသတင်း အချက်အလက်ကိုGှာမေတပFါ။", - "Low Balance Limit Notify": "လက်ကျန်ကနသ့်တ်ချက်နည်းပါးေPကာင်းအသိေပးြခင်း", - "Meter Charge": " မီတာ တာဝနခ် ံ", - "Meter Reset Failed Feedback": "မီတာြပနလ်ည်သတ်မှတ်ြခင်းမေအာင်ြမင်ေသာတUံjြပန် ချက်", - "Meter Reset Feedback": "မီတာြပနလ်ည်သတ်မှတ်ြခင်းတUံjြပနခ်ျက်", - "OverdueAppliancePaymentReminder": "ရက်လနွေ်နေသာစက်သံုးပစSည်းေငေွပးေချမ6 သတိေပးချက်", - "Pricing Details": "ေစျးJှ+နး် အေသးစိတ်", - "ResendLastTransactionInformation": "ေနာက်ဆံုးေငေွပးေငယွ ူသတင်းအချက်အလက် ကို ြပနပ် Uိပါ။", - "Sms Footer": "Sms ေအာက်ေြခမှတ်", - "Sms Header": " Smsေခါင်းစီး", - "TariffFixedCost": "အခွနအ်ခပံုေသကုနက်ျစရိတ်", - "TicketingSystemTag": "Ticketing System Tag", - "accessRate": " ဝင်ေရာက်မ6Jှ+နး် ", - "accessRateDebt": " ဝင်ေရာက်မ6Jှ+နး် အေMကး", - "accessRatePeriodInDays": "ဝင်ေရာက်မ6Jှ+နး် ကာလအပိုင်းအြခား", - "accessRatePrice": " ဝင်ေရာက်မ6Jှ+နး် ေစျးJှ+နး် ", - "addAdditionalCostComponent": "အပိုကုနက်ျစရိတ်အစိတ်အပိုင်းကိုထည့်ပါ။", - "addAdditionalSmsAndroidSetting": "အပိုေဆာင်း အက်စ်အမ်အက်စ် အင်ဒရွိ+က် ဆက်တင် ထည့်ပါ။", - "addBalance": "လက်ကျနေ်ငထွည့်ပါ။|လက်ကျနေ်ငကွိုေအာင်ြမင်စွာထည့်သွင်းခဲ့သည်။", - "addCommissionType": "ေကာ်မGှင်အမျ+ိးအစားထည့်ပါ။|ေအးဂျင်ေ့ကာ်မGှင်ကိုေအာင်ြမင်စွာ ထည့်သွင်းခဲ့သည်။", - "addCustomer": "Add Customer", - "addNewType": "အမျ+ိးအစားအသစ်ထည့်ပါ။", - "addReceipt": "ေြပစာထည့်ပါ။|ေြပစာကိုေအာင်ြမင်စွာထည့်လိကု်ပါNပီ။|ဤေအးဂျင်သ့ည် စွမ်းအင်ပံ့ပိုးေပးသူကို အေMကးမတင်ပါ။", - "addReceiptNotify": "အPကံြပ+လက်ခံြဖတ်ပိုင်းပမာဏသည်", - "addTou": "TOU ထည့်ပါ။ (အသံုးြပ+ချနိ )် ", - "agentCommissionDeleted": "ေအးဂျင်ေ့ကာ်မGှင်ကိုဖျက်လိကု်ပါNပီ။!", - "agentCommissionUpdated": "ေအးဂျင်ေ့ကာ်မGှင်ကိုြပ+ြပင်လိကု်ပါNပီ။!", - "agentTicket": "ေအးဂျင်လ့က်မှတ်|ေအးဂျင်လ့က်မှတ်များ", - "agentTransaction": " ေအးဂျင့် အေရာင်းအဝယ် | ေအးဂျင့် အေရာင်းအဝယ်များ", - "allNetworkProviders": "ကွနရ် က်ပံ့ပိုးေပးသူအားလံးု ", - "allTariffs": "အခွနJ် ှ+နး်အားလံးု", - "allTransactions": "ေငေွပးေငယွ ူအားလံးု", - "anyCategory": "မည်သည့်အမျ+ိးအစားမဆို", - "anyUser": "မည်သည့်အသံုးြပ+သူမဆို", - "apiKey": "API Key", - "apiToken": "API Token", - "appliance": "Appliance | Appliances", - "applianceCommission": "စက်ကိရိယာ ေကာ်မGှင်", - "assetType": "ပိုင်ဆိုင်မ6အမျ+ိးအစား | ပိုင်ဆိုင်မ6အမျ+ိးအစားများ", - "assignAppliance": "စက်ပစSည်းကိုသတ်မှတ်ေပးပါ။ |ေပးအပ်ထား ေသာ ပစSည်းများ | စက်ပစSည်းကို ေအာင်ြမင်စွာ သတ်မှတ်ေပးခဲ့သည်။", - "assignClusterManager": "အစုအဖဲFမနေ်နဂျာတာဝနေ်ပးပါ။", - "assignFor": "တာဝနေ်ပးထားေသာ|တာဝနေ်ပးထားခဲ့ေသာ", - "assignTo": "တာဝနေ်ပးရန်|တာဝနေ်ပးထားသည်။", - "authenticationToken": "စစ်မှနေ်Pကာင်းအေထာက်အထားြပတိကုင်", - "averagePeriod": "ပျမ်းမRကာလ", - "avgRevenue": "ပျမ်းမRဝင်ေင ", - "avgRevenuePerConnection": "ချတိ ်ဆက်မ6တစ်ခုအတကွ ် ပျမ်းမRဝင်ေင ွ", - "balanceHistories": "လက်ကျနမ် ှတ်တမ်းများ", - "batteryChargeStatus": " ဘက်ထရီအားသွင်းမ6အေြခအေန", - "batteryLevel": "Battery Level", - "batteryPvCharts": " ဘက်ထရီJှင့် PV ဇယားများ", - "batteryVoltage": "Battery Voltage", - "bulkSms": "အစုလိကု ်စာတို SMS |sms အများအြပားပUိရန် ေသချာပါသလား? | Sms(es)ေတွ ပUိ ေနတယ် ", - "businessNumber": "လပု်ငနး်နပံါတ်", - "changePassword": " စကားဝှက်ကိုေြပာင်းရန", - "closedTicket": " လက်မှတ်ပိတ်", - "clusterMap": "အစုအဖဲFေြမပံု", - "clustersDashboard": "Clusters Dashboard", - "commissionType": "ေကာ်မGှင်အမျ+ိးအစား | ေကာ်မGှင်အမျ+ိးအစားများ", - "comparedPeriod": "ကာလJှ+ိ င်းယှV်", - "componentPrice": "အစိတ်အပိုင်း ေစျးJှ+နး်", - "confirmPassword": "စကားဝှက်ကို အတည်ြပ+ပါ", - "connectedMeters": "ချတိ ်ဆက်ထားေသာ မီတာများ", - "connectedPower": "ချတိ ်ဆက်ထားေသာ ပါဝါ", - "connectionGroup": "ချတိ ်ဆက်မ6 အပု ်စု| ချတိ ်ဆက်မ6 အပု ်စုများ", - "connectionType": " ချတိ ်ဆက်မ6 အမျ+ိးအစား | ချတိ ်ဆက်မ6 အမျ+ိးအစားများ", - "connectionTypeDetails": "ချတိ ်ဆက်မ6 အမျ+ိးအစား အေသးစိတ်", - "conversationId": " စကားဝိုင်း Id", - "createFirsRecord": "သင်၏ပထမဆံုးမှတ်တမ်းကိုဖနတ် ီးပါ။| ပထမဆံုး {data} မှတ်တမ်းကို ဖနတ် ီးပါ။", - "createdAt": "တငွ ် ဖနတ် ီးခဲ့သည်။", - "createdDate": "ဖနတ် ီးသည့်ရက်စဲွ", - "customerList": " ေဖာက်သည် စာရင်း", - "dataLogger": "ေဒတာ-ေလာဂ့ ျာ | ေဒတာေလာဂ့ ျာကို ရပါNပီ။ ေဒတာေလာဂ့ ျာကို ပိတ်ထားသည်။", - "deferredDebt": "ေရXYဆိုင်းအေMကး", - "deferredPayment": "ေရXYဆိုင်းေပးေချမ6", - "deleteAgent": "Agent ကိုဖျက်ပါ။ |ေအးဂျင်က့ ို ေအာင်ြမင်စွာ ဖျက်လိကု ်ပါNပီ။ | ေအးဂျင်က့ ို အပ်ဒိတ် လပု ်NပီးပါNပီ။ |{name} ကို ဖျက်ပစ်မည်ဟု အတည်ြပ+ပါသည်။", - "deleteAgentCommission": "ေအးဂျင်ေ့ကာ်မGှင်ကိုဖျက်ပါ။|{commissionName}ကိုဖျက် ပစ်မည်ဟု က[Jပု် ်အတည်ြပ+ပါသည်။", - "deleteAppliance": "Delete Appliance", - "deleteAssetType": "ပိုင်ဆိုင်မ6အမျ+ိးအစားကိုဖျက်ပါ။ | ပိုင်ဆိုင်မ6 အမျ+ိးအစားကို ေအာင်ြမင်စွာ ဖျက်လိကု ်ပါNပီ။ | ပိုင်ဆိုင်မ6အမျ+ိးအစားကို ဖျက်ရန် ေသချာပါသလား။ | ပိုင်ဆိုင်မ6အမျ+ိးအစားကို အပ် ဒိတ်လပု ်NပီးပါNပီ။", - "deleteCustomer": "ဝယ်ယူသူကိုဖျက်ပါ။ | ဝယ်ယူသူ ေအာင်ြမင်စွာ ဖျက်လိကု ်ပါNပီ", - "deleteCustomerNotify": "{name}{surname} ကို ဖျက်ပစ်မည်ဟု အတည်ြပ+ပါသည်' ", - "deleteMeter": "မီတာကိုဖျက်ပါ။ |{serialNumber}ကို ဖျက်ရန် အတည်ြပ+ပါသည်", - "deleteMeterNotify": "မီတာကို ဖျက်ရန် အတည်ြပ+ရပါမည်။ | မီတာကို ေအာင်ြမင်စွာ ဖျက်လိကု ်သည်", - "distributeThis": "Please distribute this to your customers and ask them to send their meter number to register our Viber communication system.", - "downPayment": "Down Payment", - "dueDate": "ေနာက်ဆံုးရက်", - "editConnectionGroup": "ချတိ ်ဆက်မ6အဖဲFကို တည်းြဖတ်ပါ။ |ဤချတိ ်ဆက်မ6အဖဲFအမည်ကိုေြပာင်းရန် ေသချာပါသလား။ |ချတိ ်ဆက်မ6အဖဲFကို အပ်ဒိတ်လပု ်NပီးပါNပီ။", - "editConnectionType": "ချတိ ်ဆက်မ6အမျ+ိးအစားကို တည်းြဖတ်ပါ။", - "editConnectionTypeNotify": " ချတိ ်ဆက်မ6အမျ+ိးအစားအမည်ကို ေအာင်ြမင်စွာ အပ်ဒိတ်လပု ် ထားသည်။ |{name}အတကွ ် ချတိ ်ဆက်မ6 အမျ+ိး အစားအမည်ကိုေြပာင်းရန် ေသချာပါသလား။ ", - "editRate": "တည်းြဖတ်Jှ+နး်ထား", - "editSubConnectionType": "Sub Connection အမျ+ိးအစားကို တည်းြဖတ်ပါ။", - "editSubConnectionTypeNotify": "ဤချတိ ်ဆက်မ6ခဲွ အမျ+ိးအစား ကိုေြပာင်းရန် ေသချာပါ သလား။ | ချတိ ်ဆက်မ6ခဲွကို ေအာင်ြမင်စွာ မွမ်းမံNပီး ပါNပီ။", - "enableAccessRate": "ဝင်ေရာက်မ6Jှ+နး်ဖွင်ပ့ါ။", - "enableMinimumPurchaseAmount": "Enable Minimum Purchase Amount", - "energyCommission": "စွမ်းအင် ေကာ်မGှင်", - "expireSession": "ဆက်Gှင်သက်တမ်းကုနေ်တာမ့ည်။", - "expireSessionLabel": "သင်ဆ့က်Gှင်အပိုင်းကိုေနာက်ထပ်60(ေြခာက်ဆယ်)မိနစ်အထိ သက်တမ်းတိးုလိပုါကဤဝင်းဒိးုကိုအတည်ြပ+ပါ။| သင်ဆ့က်Gှင်သည်{expires_in}စကန]်တ့ွင်သက်တမ်းကုနဆ်ံုးပါသည်။", - "financeOverview": "ဘ^ာေရး ြခံ+ငံသု ံုးသပ်ချက် (ကာလ-{ကာလ})", - "flatLoadLimit": "ပံုေသဝန်ကနသ့်တ်", - "flatPrice": "ပံုေသ ေစျးJှ+နး်", - "forgotPassword": " စကားဝှက်ကိုေမ့ေနပါသလား | စနစ်တငွ ် အသံုးြပ+ေသာ သင်အ့ ီးေမးလ် လိပ်စာကို ထည့်သွင်းပါ။", - "fromDate": "ရက်စဲွ မှ", - "getUpdatesFrom": "အပ်ဒိတ်ကို {x}မှ ရယူပါ", - "inReturn": "၌ြပနလ်ာ", - "inXSeconds": "{x}စကနအ့်တငွ်း", - "incomingTransactions": "အဝင် ေငလွ ဲမX 6များ", - "isPrimary": "မူလ ြဖစ်ပါသလား", - "jobTitle": "အလပု ်အကိုင်အမည်", - "lastDataReceived": "Last Data Received", - "lastPayment": "ေနာက်ဆံုးေငေွပးေချမ6", - "lastReceipts": "ေနာက်ဆံုး လက်ခံြဖတ်ပိုင်းများ", - "lastSyncDate": "ေနာက်ဆံုးစင်ခ့ ်/ထပ်တြူပ+ြခင်းလပု ်သည့်ရက်စဲွ", - "lastTransactions": "ေနာက်ဆံုး ေငလွ ဲမX 6များ", - "lastUpdate": "ေနာက်ဆံုး အပ်ဒိတ် / မွမ်းမံ", - "lastXDays": "ေနာက်ဆံုး {x}ရက်", - "listOfTickets": "လက်မှတ်များစာရင်း", - "livingIn": "တငွ ် ေနထိုင်ေန", - "loadingChartData": "ဇယားအချက်အလက် ေဒတာကို တင်ေနသည်။", - "loadingData": "အချက်အလက် ေဒတာကို တင်ေနသည်။", - "loanRate": "ေချးေငJွ ှ+နး်", - "logOut": "ထွက်လိုက်ပါ။", - "loginNotify": "သင်၏Mini-Gridကိုစီမံခန]်ခ့ွဲရန်အလယွ ်ဆံုးနည်းလမ်း|အေထာက်အထား စိစစ်ြခင်း မေအာင်ြမင်ပါ။ သင်၏ အေထာက်အထားများကိုစစ်ေဆးပါ။", - "manufacturerName": "Manufacturer Name", - "mapProvider": "ေြမပံု ပံ့ပိုးသူ", - "maxCurrent": "မက် လက်Gှိ", - "merchantId": "Merchant ID", - "messageNotify": "မက်ေဆ့ဂျတ်ငွ်စာလံးု3လံးုထက်ပို၍ပါဝင်သင်သ့ည်။", - "messageText": "စာတို စာသား", - "meterDetail": " မီတာအေသးစိတ် | မီတာအေသးစိတ်များ", - "meterDetailNotify": "မေမRာ်လင်ထ့ားေသာအမှားအယွင်း| သင်စ့နစ်စီမံခန]်ခ့ွဲသူထံဆက်သွယ်ပါ။|ပိုင်Gှင်အသစ်လိအုပ်သည်!", - "meterDetailNotify2": "ပိုင်Gှင်အသစ်ကို ေရွးချယ်ပါ။ | မီတာကိုြပနလ်ည်သတ်မှတ်ေပးပါသလား။|မီတာကို{name}မှ{newName}သUိသတ်မှတ်ေပးရန် ေသချာပါသလား။?", - "meterReadings": "မီတာဖတ်ြခင်း", - "meterTransaction": "မီတာလဲေXြပာင်းြခင်း|မီတာလဲေXြပာင်းြခင်းများ", - "meterTypes": "မီတာအမျ+ိးအစားများ", - "miniGridMap": "မီနဂီရစ်ေြမပံု", - "minimumPayableAmount": "Minimum Payable Amount (access to the system for 7 days) | Minimum Payable Amount (access to the system for 30 days)", - "minimumPurchaseAmount": "Minimum Purchase Amount", - "minimumPurchaseAmountDescription": "This field represents minimum price of the purchase the customer can do. You can leave it as zero If you do not want to apply this feature", - "missingField": "ေပျာက်ဆံုးေနေသာ အကွက်", - "mobileProvider": "မိုဘိုင်းဝနေ်ဆာင်မ6ေပးသူ", - "modelName": "Model Name", - "monthlyAvg": "လစV် ပျမ်းမR", - "monthlyReports": "လစV် အစီရင်ခံစာများ", - "mpesaReceipt": "Mpesa ေြပစာ", - "mustBeNegative": "Negative ြဖစ်ရမယ်။", - "namingCluster": "Cluster အမည်ေပးြခင်း", - "newAddress": "လိပ်စာအသစ်", - "newAgent": "ကိုယ်စားလှယ်အသစ် | ကိုယ်စားလှယ်ကို ေအာင်ြမင်စွာ ထည့်သွင်းခဲ့သည်။", - "newAppliance": "New Appliance | Appliance Registered Successfully", - "newAssetType": " ပိုင်ဆိုင်မ6အမျ+ိးအစားအသစ် | ပိုင်ဆိုင်မ6 အမျ+ိးအစား မှတ်ပံုတင်NပီးပါNပီ။", - "newCategory": "အမျ+ိးအစားအသစ် | အမျ+ိးအစားအသစ်ကို ေအာင်ြမင်စွာ ထည့်သွင်းခဲ့သည်။", - "newCluster": " Cluster အသစ် |{cluster အမည်}အတကွ ် ရလဒ်မGှိပါ။ သင်၏ Cluster အစုအေဝးဧရိယာကိုဆဲွရနအ်တကွ်Drawpolygontoolကိုအသံုးြပ+ပါ။", - "newClusterNotify": " သင်သည် အစုအေဝး cluster သU ိ အမည် တစ်ခု မထည့်ခဲ့ပါ။ ေကျးဇူးြပ+၍ အစုအေဝးသUိ အမည်တစ်ခု သတ်မှတ်ေပးပါ။ | အစုအဖဲFတည်ေနရာကို ေရွးချယ်မထားပါ | အစုအေဝးအတကွ ် တည်ေနရာကို ေရွ းချယ်/ဆဲွပါ။", - "newClusterNotify2": "Cluster Manager ကို ေရွးမထားပါ | ေကျးဇူးြပ+၍အစုအဖဲFမနေ်နဂျာကိုေရွးချယ်ပါ။|သင်ထည့်သွင်းထားေသာClusterကိုေအာင်ြမင်စွာ သိမ်းဆည်းထားသည်။", - "newComment": "မှတ်ချက် အသစ်", - "newConnection": "ချတိ ်ဆက်မ6အသစ် | ချတိ ်ဆက်မ6အသစ်များ", - "newConnectionGroup": "ချတိ ်ဆက်မ6အဖဲFအသစ် | ချတိ ်ဆက်မ6အဖဲF တငွ ် စာရင်းသွင်းထား ပါသည်။", - "newConnectionType": "အသစ်ချတိ ်ဆက်မ6အမျ+ိးအစား | ချတိ ်ဆက်မ6 အမျ+ိးအစား မှတ်ပံုတင်ထားသည်။", - "newConnectionsTarget": "ချတိ်ဆက်မ6အသစ်/ပနး်တိငု်", - "newEBike": "New E-Bike | New E-Bike created successfully", - "newMaintenanceRequest": "အသစ်ြပ+ြပင်ထိနး်သိမ်းေရးေတာင်းဆိုမ6|တာဝနက် ိုေအာင်ြမင်စွာ ဖနတ် ီးခဲ့သည်။ လကူ ိုလည်း sms ြဖင့် အေPကာင်း Pကားပါမည်။", - "newMaintenanceUser": "ြပ+ြပင်ထိနး်သိမ်းေရးဝနေ်ဆာင်မ6ေပးသူအသစ်|ြပ+ြပင်ထိနး်သိမ်းသူ ဖနတ် ီးထားသည်။", - "newMeterType": "မီတာအမျ+ိးအစားအသစ် | မီတာ အမျ+ိးအစား ထည့်သွင်းမ6 ေအာင်ြမင်Nပီး။", - "newMiniGrid": "မီနဂီရစ်အသစ်|သင်ထည့်သွင်းထားသည့်Mini-Gridကိုေအာင်ြမင်စွာ သိမ်းဆည်းထားသည်။", - "newOwner": "ပိုင်Gှင် အသစ်", - "newShs": "New Solar Home System | New Solar Home created successfully", - "newSms": "Sms အသစ်", - "newSubConnectionType": "Sub Connection အမျ+ိးအစား အသစ် | Sub Connection Type တငွ ် စာရင်းသွင်းထားသည်။", - "newTarget": "ပစ်မှတ်အသစ် |ပစ်မှတ်အတကွ ် ဦးတည်ရာကို ေရွးပါ။", - "newTargetNotify": "လိအုပ်ေသာအကွက်အားလံးုကိုြဖည့်စွက်ပါ။|ပစ်မှတ်ကိုေအာင်ြမင်စွာ သိမ်းဆည်းထားသည်။", - "newTariff": "အခွနJ်ှ+နး်သစ်|အေကာက်ခွနအ်သစ်မှတ်ပံုတင်NပီးပါNပီ။", - "newTariffLabels": "kWhေစျးJှ+နး်(ေနာက်ဆံုးဂဏနး်Jှစ်လံးုသည်ဒဿမJှစ်ခုဥပမာ-100=1.00ကိုကိုယ်စား ြပ+သည်)|ဤအကွက်ကိုအသံုးြပ+ရနအ်တကွ်၊အသံုးြပ+မည့်မီတာခများသည်အသံုးြပ+ချနိအ်တကွ် သင်ေ့လျာ်ရပါမည်။", - "newTicket": "လက်မှတ် အသစ် ", - "newTicketingUser": "လက်မှတ်အသံုးြပ+သူအသစ်", - "newUser": "အသံုးြပ+သူအသစ် |အသံုးြပ+သူအသစ် ဖနတ် ီးထားသည်။", - "newVillage": "ေကျးရွာအသစ်", - "newVillageNotify": "သင်ထည့်ထားေသာေကျးရွာကို ေအာင်ြမင်စွာ သိမ်းဆည်းထားသည်။", - "noData": "ေဒတာမGှိပါ။|ေဒတာမေတပFါ", - "noDataFoundFor": "{ေဒတာ}အတကွ်ေဒတာမေတပFါ", - "noOne": "ဘယ်သူမှ", - "onlyApproved": "အတည်ြပ+ြခင်းသာြဖစ်သည်", - "onlyRejected": "ြငင်းပယ်ြခင်းသာြဖစ်သည်", - "openTicket": "မှတ်တမ်းအသစ်ဖွင်ြ့ခင်း", - "orderId": "Order ID", - "originatorConversationId": "အစြပ+သူ စကားဝိုင်း အိငု ်ဒီ", - "outgoingSms": "Outgoing sms", - "overDueReminderRate": "သတ်မှတ်ရက်ထက်ေကျာ်လနွေ်သာသတိေပးချက်Jှ+နး်ထား(ေန)့", - "paginateLabels": "ပါဝင်မ6 {စုစုေပါင်း}၏ {မှ} မှ {သU ိ} ကို ြပသသည်။", - "paidFor": "အတကွ ် ေပးခဲ့သည်", - "passwordProtected": "စကားဝှက် အကာအကွယ် ဇုန် | ဤဧရိယာသUိ ဝင်ေရာက်ရန် စကားဝှက်ကို ထည့်သွင်းပါ။", - "paymentDistribution": "ေငေွပးေချမ6ြဖနေ့်ဝြခင်း", - "paymentFlow": "ေငေွပးေချမ6စီးဆင်းမ6|လစV်ပျမ်းမR{ေငေွPကး} ေကျာ်လနွ ် {အေရအတကွ ်}လများ", - "paymentOverview": "ေငေွပးေချမ6ြခံ+ငံသုံုးသပ်ချက်{ကာလ}", - "paymentRequests": "ေငေွပးေချမ6ေတာင်းဆိုမ6များ", - "paymentService": "ေငေွပးေချမ6ဝနေ်ဆာင်မ6", - "paymentType": "ေငေွပးေချမ6အမျ+ိးအစား", - "perPage": " စာမျက်Jှာ တစ်ခုစီ", - "personalInformation": "Personal Information", - "pleaseShareThis": "Please share this link with your customers for making their online payments.", - "preparingChartData": "ဇယားေဒတာ ြပင်ဆင်ြခင်း", - "processTime": "လပု်ငနး်စV်အချနိ", - "processedTransactions": "စီမံထားေသာ ေငလွ ဲမX 6များ", - "providerSpecificInformation": "ပံ့ပိုးေပးသူ၏ သီးြခား အချက်အလက်", - "purchaseCode": "အဝယ်ကုဒ်", - "rateType": "Rate Type", - "ratesCount": "Jှ+နး်ထားများေရတကွ ်|ပိုင်ဆိုင်မ6Jှ+နး်ထားကိုေအာင်ြမင်စွာအပ်ဒိတ်လပု် ထားသည်။", - "redirectLabel": "ဤေနရာကိုအသံုးြပ+ရနအ်တကွ်သင်သည်{imperativeItemမGှိမြဖစ် အရာ}ကို ထည့်ရပါမည်", - "referenceId": "Reference ID", - "refreshData": "Refresh Data", - "registeredClusters": "မှတ်ပံုတင်ထားေသာ အစုအဖဲFများ", - "registeredCustomers": "မှတ်ပံုတင်ထားေသာ ေဖာက်သည်များ", - "relocateMeter": "မီတာေနရာေြပာင်း|ေရွးချယ်ထားေသာမီတာများကိုေနရာေြပာင်းလိသုည်မှာ ေသချာပါသလား။ | မီတာကို ေအာင်ြမင်စွာ ေရXYေြပာင်းခဲ့ပါNပီ။", - "remainingAmount": "လက်ကျနပ် မာဏ", - "reminderRate": "သတိေပးချက်Jှ+နး် (ေန)့", - "responsibleFor": "(Mini-Grid)အတကွ ် တာဝနယ် ူ", - "revenueAnalysis": " ဝင်ေငွ ခဲွြခမ်းစိတ်ြဖာြခင်း။", - "revenueColumns": " ဝင်ေငွ ေကာ်လံများ", - "revenueLine": "ဝင်ေငလွ ိငု ်း", - "revenuePerCustomerType": "ေဖာက်သည်အမျ+ိးအစားအလိကု ် ဝင်ေငွ |ေရွးချယ်ထားေသာကာလ အတကွ ် ေဒတာမGှိပါ။", - "revenuePercentiles": "ဝင်ေငွရာခိုင်Jှ+နး်များ", - "revenueTargetsPerCustomerType": "ေဖာက်သည်အမျ+ိးအစားအလိကု်ဝင်ေငပွစ်မှတ်များ| ရည်မှနး်ထားေသာဝင်ေငွ ", - "revenueTrends": "ဝင်ေငလွမ်းေPကာင်းများ", - "riskBalance": "အJရfာယ်/စွနစ့်ားရေြခလက်ကျန", - "sameDayLastWeek": "ယခင်အပတ်က ထိုေန့", - "searchResultFor": "Gှာေဖွမ6 ရလဒ်", - "secretKey": "Secret Key", - "selectColor": "အေရာင် ေရွးပါ။", - "selectDevice": "Select a Device to bind with this appliance", - "selectMiniGrid": "မီနဂီရစ်ကိုေရွးပါ။|မီနဂီရစ်Data-loggerသည်အသက်ဝင် ပါသည်။", - "selectPeriod": "ဝင်ေငေွဒတာအတကွ်ကာလတစ်ခုကိုေရွးပါ", - "sellAsset": "ပိုင်ဆိုင်မ6ကိုေရာင်းပါ။ | ပစSည်းအသစ်ကို ေအာင်ြမင်စွာ ေရာင်းချJငုိ ်ခဲ့သည်။ | ပိုင်ဆိုင်မ6ကို{ကုနက်ျစရိတ်အတကွ်}ေရာင်းချရန်ေသချာပါသလား။", - "sentDate": "ေပးပUိသည့်ေန]စ့ွဲ", - "serialNumber": "အမှတ်စV် နပံ ါတ်", - "setPoints": "အမှတ်များ သတ်မှတ်ပါ။", - "signIn": "ဆိုင်းအင်လပု ်ြခင်း / ဝင်ေရာက်ြခင်း", - "smsHistory": "Sms မှတ်တမ်း", - "smsList": " Sms စာရင်း ", - "smsListNotify": "မက်ေဆ့ဂျတ်ငွ်စာလံးု၃လံးုထက်ပိုပါဝင်သင့်သည်။SmsများပUိသည်", - "socialTariff": "လမူ6ေရးအခွနအ်ခ|ကီလိဝုပ်တစ်နာရီေစျးJှ+နး်| ကနဦး စွမ်းအင်ဘတ်ဂျက်", - "socialTariffLabels": "လမူ6ေရးအခွနအ်ခြဖင့်ေနစ့V်ေထာက်ပံ့ေPကး | အများဆံုး စုပံုထားေသာ စွမ်းအင်", - "socialTariffOptions": "လမူ6ေရးအခွနအ်ခေရွးချယ်မ6များကိုြပပါ။|လမူ6ေရးအေကာက်ခွန် ေရွးချယ်စရာများကို ဝှက်ထားပါ", - "soldAppliances": "ပစSည်းကရိယာများ ေရာင်းချခဲ့ြခင်း", - "soldAssets": "ပိုင်ဆိုင်မ6များကို ေရာင်းချခဲ့သည်။", - "soldDate": "ေရာင်းချသည့်ေန]စ့ွဲ", - "soldEnergy": "စွမ်းအင် ေရာင်းချခဲ့ြခင်း (အေရာင်းအဝယ်အေပg အေြခခံ၍)", - "somethingWentWrong": "တစ်ခုခု မှားသွားသည်။", - "sparkMeterNotify": "ေဖာက်သည်များကို ထပ်တြူပ+ရန် မီတာ ေမာ်ဒယ်များကို ထပ်တြူပ+ရပါမည်။ |ေဖာက်သည်များကိုတNပိ+င်တည်းလပု်ေဆာင်ရန်အခွနစ်ည်းPကပ်မ6များကိုထပ်တြူပ+ရပါမည်", - "statusNow": "ယခုအဆင်အ့တနး်", - "stepperLabels": "MiniGridData-logger၏အခမဲ့ကနသ့်တ်ချက်သည်ေကျာ်လနွသ်ွားပါ Nပီ။ေအာက်ေဖာ်ြပပါသင်၏အသက်သွင်းထားေသာမီနဂီရစ်စာရင်း။|၎င်းတUိထဲမှတစ်ခုကိုပိတ်ရန် Jှစ်သက်Jငုိ ် သည်၊ သUိမဟတု ် ေအာက်တငွ ် ေနာက်ထပ် slot များကို မှာယူJငုိ ်ပါသည်။", - "stepperLabels2": "ဝယ်ယူမ6တငွ်ေပးထားသည့်ကုဒ်ကိုiုိက်ထည့်ြခင်းြဖင့်ေငေွပးေငယွူကို အNပီးသတ်ပါ။|သင်သည်မီနဂီရစ်ေဒတာကိုမှတ်တမ်းတင်ရနအ်တကွ်ေနာက်ထပ်slotတစ်ခုကို သင်ဝယ်ယူNပီးြဖစ်သည်။", - "stepperLabels3": "စနစ်တငွ်ထိနး်သိမ်းသူအသစ်များထည့်ရန်ေနာက်ထပ်slotငါးခုကိုသင် ဝယ်ယူထားသည်။|သင်ေ့ငေွပးေချမ6ကိုက[Jပု််တUိလပု်ေဆာင်၍မရပါ။ေကျးဇူးြပ+၍စီမံခန]်ခ့ွဲသူကို ဆက်သွယ်ပါ။", - "stepperLabels4": "အခမဲ့ြပ+ြပင်ထိနး်သိမ်းေရးအသံုးြပ+သူများ၏ကနသ့်တ်ချက်သည်ေကျာ် လနွ သ် ွားပါNပီ... | ေအာက်ပါ အထိုင် slot များကို မှာယူJငုိ ်ပါသည်။", - "subConnectionTypes": "ချတိ ်ဆက်မ6 အခဲွ အမျ+ိးအစားများ", - "subTargets": "ပစ်မှတ်များ", - "subTypes": "အမျ+ိးအစားခဲွများ", - "successfullyUpdated": "Successfully Updated", - "swiftaTransaction": "SwiftaTransaction", - "targetsForConnectionTypes": "ချတိ ်ဆက်မ6 အမျ+ိးအစားများအတကွ ် ပစ်မှတ်များ", - "tariffDetail": "အခွနအ်ခအေသးစိတ်|ဤအခွနအ်ခကိုေသချာစွာမွမ်းမံNပီးNပီလား?", - "tariffNotify": "အခွနအ်ခကိုေအာင်ြမင်စွာဖျက်လိကု်ပါNပီ။|မီတာအသံုးြပ+မ6အေပgအခွန် Jှ+နး်ထားကိုေအာင်ြမင်စွာေြပာင်းလဲခဲ့သည်။|ဤအခွန်အခသည်မီတာ၏{အသံုးြပ+မ6အေရအတကွ ်ြဖင့် အသံုးြပ+ပါသည်။ ဤအခွန် အခကို အပ်ဒိတ်လပု ်ရန် ေသချာပါသလား။", - "tariffNotify2": "ဤအခွနအ်ခကိုဖျက်ရန်ေသချာပါသလား။|ဤအခွနအ်ခသည်မီတာ၏ {အသံုးြပ+မ6အေရအတကွ်}ြဖင့်အသံုးြပ+ပါသည်။မီတာအခွနအ်ခများေြပာင်းလဲရန်ဆံုးြဖတ်ရပါမည်။ဤ အေကာက်ခွနက် ို ဖျက်ရန် ေသချာပါသလား", - "thirdPartyTransaction": "အြခားသူတစ်ဦးြဖင့်ေငလွ ဲြXခင်း", - "thisKeyWillUseIn": "၎င်းတUိ၏ေနာက်ဆံုးေငေွပးေငယွူသတင်းအချက်အလက်ကိုရယူလိေုသာ ေဖာက်သည်များအတကွ်ေနာက်ဆံုးေငေွပးေငယွူသတင်းအချက်အလက်ေသာခ့ျက်ကိုြပနလ်ည်ေပးပUိပါ။ ေဖာက်သည်များသည်၎င်းတUိ၏ေနာက်ဆံုးေငေွပးေငယွူသတင်းအချက်အလက်ကိုရယူလိေုသာအခါ တငွ်၎င်းတUိသည်ဤေသာြ့ဖင့်စတင်သည့်SMSစာတိတုစ်ေစာင်ေပးပUိjNပီးသံုးစဲွသူမီတာအမှတ်စV် နပံါတ်ြဖင့်ဆက်လက်လပု်ေဆာင်ရနလ်ိအုပ်သည်။", - "thisPeriod": "ဤကာလ", - "ticketCategories": "လက်မှတ် အမျ+ိးအစားများ", - "ticketDetails": "လက်မှတ်အေသးစိတ်", - "ticketLabels": "ထိုလက်မှတ်များကိုြပင်ပလူ(ဝနထ်မ်းမဟတု်)ထံသUိေပးေဆာင်မည်ြဖစ်သည်။ |မည်သည့်ေမးခွနး်ြဖင်မ့ဆို{အီးေမးလ်Jှင့်ဆက်သွယ်ပါ။}", - "ticketNotify": "လက်မှတ်ကို ေအာင်ြမင်စွာ ပိတ်လိကု ်ပါNပီ။ | မှတ်ချက်ကို ေအာင်ြမင်စွာေပးပU ိပါ။.", - "ticketUserNotify": "User added successfully. | {tag} not found in the Ticketing system!", - "ticketingSystemTag": "Ticketing System Tag", - "ticketsOverview": "လက်မှတ်များ ြခံ+ငံသု ံုးသပ်ချက် | ဖွင်လ့ ှစ်ထား ေသာ လက်မှတ်များသည် ဘယ်ဘက်တငွ ်GှိNပီး ညာဘက်ြခမ်းတငွ ် ေြဖGှင်းထား ေသာ လက်မှတ်များ, လက်မှတ်အသံုးြပ+သူ အသိေပးချက်- အသံုးြပ+သူကို ေအာင်ြမင်စွာ ထည့်သွင်းခဲ့သည်။ | လက်မှတ်ေရာင်းသည့်စနစ်တငွ ် {tagတဂ်}မေတပFါ ", - "toDate": "ယေနအ့ထိ", - "totalCost": "စုစုေပါင်းကုနက်ျစရိတ်", - "totalRevenue": "စုစုေပါင်း ဝင်ေင ွ", - "transactionCancelled": "Transaction cancelled", - "transactionId": "ေငေွပးေငယွ ူID", - "transactionIdentifier": "ေငေွပးေငယွ ူသတ်မှတ်စနစ်", - "transactionNotify": "Jှ+ိင်းယှV်ရန်အချက်အလက်လံေုလာက်မ6မGှိပါ။", - "transactionProcessing": "ေငေွပးေငယွ ူေဆာင်ရွက်ြခင်း", - "transactionReference": "Transaction Reference", - "untraceableTransaction": "Untraceable transaction", - "updateAddress": "လိပ်စာ မွမ်းမံပါ", - "userForOutsourcing": "ြပင်ပအရင်းအြမစ် အသံုးြပ+သူ", - "userId": "User ID", - "userList": "အသံုးြပ+သူစာရင်း", - "userManagement": "အသံုးြပ+သူစီမံခန]်ခ့ွဲမ6", - "userTicket": "အသံုးြပ+သူလက်မှတ် | အသံုးြပ+သူလက်မှတ်များ", - "validUntil": "သည်အထိ အကျ+ံးဝင်သည်။", - "waveComTransaction": "WaveCom Transaction", - "waveMoneyTransaction": "Wave Money Transaction", - "weeklyReports": "အပတ်စV် အစီရင်ခံစာများ", - "wholeVillage": "တစ်ရွာလံးု ", - "writeMessage": " စာတို ေရးပါ။...", - "wrongPassword": "Wrong password", - "yourAuthTokenForSwifta": "Your auth token for Swifta Payments, please share this with Swifta to use this token in their API requests.", - "yourMessage": "သင်၏မက်ေဆ့ချက် ယခုကဲ့သUိမျ+ိး ြမင်ရလိမ့်မည်။" - }, - "words": { - "access": "သံုးစဲွခွင့် ", - "activate": "အသက်သွင်း | အသက်သွင်းNပီးပါNပီ", - "add": "ထည့်သွင်း | ထည့်သွင်းပါNပီ", - "address": "လိပ်စာ | လိပ်စာများ", - "agent": "ေအးဂျင့် |ေအးဂျင်မ့ျား", - "all": "အားလံးု ", - "amount": "ပမာဏ", - "analysis": "ခဲွြခမ်းစိတ်ြဖာြခင်း", - "annually": "Jှစ်စV်", - "appliance": "စက်ကိရိယာ | စက်ကိရိယာများ", - "apply": "ေလRာက်ထားပါ။", - "asset": "ပိုင်ဆိုင်မ6", - "assign": "တာဝနေ်ပး|တာဝနေ်ပးထားသည်။", - "attention": "သတိြပ+ အာiုံစိုက်ြခင်း", - "authorize": "လပု်ပိုင်ခွင့်|လပု်ပိုင်ခွင်ြ့ပ+ထားြခင်း", - "authorized": "Authorized", - "balance": "လက်ကျန", - "base": "အေြခ", - "basic": "အေြခခံ", - "battery": "ဘက်ထရီ | ဘတk ရီများ", - "birthday": "ေမွးေန့", - "body": "ခJာlကိုယ်ထည်", - "callback": "ြပနေ်ခgပါ", - "cancel": "ဖျက်သိမ်းသည် | ဖျက်သိမ်းလိကု ်Nပီး", - "category": "အမျ+ိးအစား | အမျ+ိးအစားများ", - "city": "Nမိm | Nမိmများ", - "close": " ပိတ်သိမ်းသည် | ပိတ်သိမ်းလိကု ်Nပီး", - "cluster": "အစုအဖဲF | အစုအဖဲFများ", - "collapse": "Nပိ+ကျသည်။", - "color": "အေရာင်", - "column": "ေကာ်လံ | ေကာ်လံများ", - "comment": "မှတ်ချက် | မှတ်ချက်များ", - "commission": "ေကာ်မGှင်", - "compared": "Jှ+ိ င်းယှV်", - "confirm": "အတည်ြပ+ | အတည်ြပ+ခဲ့သည်။", - "connect": "ချတိ ်ဆက် | ချတိ ်ဆက်ထားသည်။", - "connection": "ချတိ ်ဆက်မ6 | ချတိ ်ဆက်မ6များ", - "connectivity": "ချတိ ်ဆက်မ6", - "consumption": "စားသံုးမ6", - "continue": "ဆက်လက်", - "conversation": "စကားဝိုင်း", - "cost": "ကုနက်ျစရိတ်", - "create": "ဖနတ် ီး | ဖနတ် ီးခဲ့သည်။", - "credit": "ခရက်ဒစ် အေMကး", - "currency": "ေငေွPကး", - "customer": "ေဖာက်သည် | ေဖာက်သည်များ", - "date": "ရက်စဲွ", - "day": "ေန့|ေနစ့V်", - "deactivate": "ပိတ်ရန် | ပိတ်ထားသည်။", - "delete": "ဖျက်ပါ။", - "description": "ေဖာ်ြပချက်", - "detail": "အေသးစိတ် | အေသးစိတ်များ", - "device": "device", - "deviceType": "Device Type", - "devices": "Devices", - "disable": "လပု ်ေဆာင်၍မရ", - "dismiss": "ပယ်ရန", - "done": "NပီးNပီ။", - "download": "ေဒါင်းလဒု ်လပု ်ပါ။", - "eBike": "E-Bike | E-Bikes", - "edit": "တည်းြဖတ်ပါ။", - "education": "ပညာေရး", - "email": "အီးေမးလ်", - "employee": "ဝနထ်မ်း", - "enable": "ဖွင်ပ့ ါ။", - "encryption": "ကုဒ်ဝှက်ြခင်း", - "end": "အဆံုး", - "energy": "စွမ်းအင် | စွမ်းအင်များ", - "expand": "ချYဲထွင်ပါ", - "female": "အမျ+ိးသမီး", - "file": "ဖိုင်", - "filter": "ဇကာ", - "finance": "ဘ^ာေရး", - "for": "ဖUိ", - "gender": "ကျား၊မ", - "generate": "ထုတ်လပု ်ရန် | ထုတ်လပု ်ေပးခဲ့သည်။", - "group": "အပု ်စု | အပု ်စုများ", - "history": "သမိုင်း | သမိုင်းများ", - "host": "လက်ခံသူ", - "id": "ID", - "incoming": "Incoming", - "key": " အဓိကအချက်", - "last": "Last", - "latitude": "Latude", - "line": "လိငု ်း", - "list": "စာရင်း", - "location": "တည်ေနရာ | တည်ေနရာများ", - "lock": "Lock", - "login": "ေလာဂ့ ်အင်", - "longitude": "ေလာင်ဂျကီျ+", - "maintenance": "ထိနး်သိမ်းြခင်း", - "male": "အမျ+ိးသား", - "manufacturer": "ထုတ်လပု ်သူ | ထုတ်လပု ်သူများ", - "map": "ေြမပံု", - "message": "စာတို|စာတိမုျား", - "meter": "မီတာ | မီတာများ", - "miniGrid": "မီန-ီ ဂရစ်", - "minimumPayableAmount": "Minimum Payable Amount (access to the system for 7 days)", - "mobile": "မိုဘိုင်း", - "month": "လ | လစV်", - "name": "အမည်", - "network": "ကွနရ် က်", - "new": "အသစ်", - "next": "ေနာက်တစ်ခု", - "no": "မဟတု ်/မမှန", - "notice": "အသိေပးစာ", - "offline": "လိငု ်းပိတ်", - "online": "အနွ လ် ိငု ်း/အနွ လ် ိငု ်းဖွင်'့", - "open": "ဖွင်လ့ ှစ် | ဖွင်လ့ ှစ်ခဲ့", - "outgoing": "အထွက်", - "outsourcing": "ြပင်ပအရင်းအြမစ်", - "overview": "ြခံ+ငံသု ံုးသပ်ချက်", - "owner": "ပိုင်Gှင်", - "paidFor": "အတကွ ် ေပးခဲ့သည်။", - "password": "စကားဝှက်", - "payment": "ေငေွပးေချမ6", - "people": "လမူ ျား", - "percentile": "ရာခိုင်Jှ+နး် |ရာခိုင်Jှ+နး်များ", - "period": "ကာလ", - "phase": "အဆင်'့", - "phone": "ဖုနး် ", - "port": "ဝင်ေရာက်ရနေ်နရာ", - "previous": "ယခင်", - "price": "ေစျးJှ+နး် ", - "primary": "မူလ", - "process": "လပု်ငနး်စV်|လပု်ေဆာင်Nပီး|လပု်ေဆာင်ေနသည်", - "profile": "ကိုယ်ေရးအကျV်း | အပ်ဒိတ် NပီးသွားပါNပီ။", - "provider": "ပံ့ပိုးသူ | ပံ့ပိုးေပးသူများ", - "rate": "Jှ+နး်ထား |Jှ+နး်ထားများ", - "rateCost": "Installment Cost for Monthly access to the system", - "reading": "ဖတ်i6မ6 | ဖတ်i6မ6များ", - "receipt": "ေြပစာ | ေြပစာများ", - "receive": "လက်ခံ", - "receiver": "လက်ခံသူ", - "redirect": "ြပနn် နXး် |ြပနn် နXး်ချက်", - "refresh": "ြပနလ်ည်စတင်ပါ။", - "register": "မှတ်ပံုတင် | မှတ်ပံုတင်ထားသည်။", - "reject": "ြငင်းပယ် | ြငင်းပယ်ခဲ့သည်။", - "relocate": "ေနရာေြပာင်းပါ။", - "report": "အစီရင်ခံစာ | အစီရင်ခံစာများ", - "revenue": " ဝင်ေငွ | ဝင်ေငမွ ျား", - "risk": "အJရf ာယ်", - "sale": " အေရာင်း", - "save": "သိမ်းဆည်းပါ။", - "search": "Gှာရန'", - "select": "ေရွးချယ်ပါ", - "sell": "ေရာင်း | ေရာင်းချခဲ့", - "send": "ပUိပါ", - "sender": "ေပးပUိသူ", - "serialNumber": "အမှတ်စV် နပံ ါတ်", - "service": "ဝနေ်ဆာင်မ6", - "shs": "Solar Home System | Solar Home Systems", - "sms": "Sms စာတိ'ု", - "solar_home_system": "Solar Home System", - "speed": "Speed", - "start": "စတင်ပါ။", - "status": "အဆင်အ့တနး်", - "street": "လမ်း", - "sub": "ခဲွ", - "subject": "ဘာသာရပ်", - "successful": "ေအာင်ြမင်တယ်။", - "surname": "မျ+ိးiုိးအမည်", - "system": "စနစ်", - "tag": "တက်ဂ်", - "target": "ပစ်မှတ် | ပစ်မှတ်များ", - "tariff": "အခအခွန်|အခအခွနမ်ျား", - "ticket": "လက်မှတ် | လက်မှတ်များ", - "time": "အချနိ '", - "title": " ေခါင်းစဥ်", - "to": "သUိ", - "token": "တိကုင်", - "total": "စုစုေပါင်း", - "transaction": "ေငေွပးေငယွ ူ|ေငေွပးေငယွ ူများ", - "trend": "လမ်းေPကာင်း | လမ်းေPကာင်းသစ်", - "type": "အမျ+ိးအစား | အမျ+ိးအစားများ", - "unauthorized": "Unauthorized", - "unlock": "Unlock", - "update": "မွမ်းမံ | မွမ်းမံထားသည်။", - "user": "အသံုးြပ+သူ | အသံုးြပ+သူများ", - "value": "တနဖ် ိုး", - "village": "ရွာ", - "week": "ရက်သတf ပတ် | အပတ်စV်", - "yes": "ဟတု ်/မှန", - "yesterday": "မေနက့ " + "menu": { + "Agents": "ေအးဂျင်မ့ ျား ", + "Angaza SHS": "Angaza SHS", + "Appliances": "Appliances", + "Asset Types": "ပိုင်ဆိုင်မ6အမျ+ိးအစားများ", + "Bulk Registration": "Bulk Registration", + "Calin Meter": "Calin Meter", + "CalinSmart Meter": "CalinSmart Meter", + "Clusters": "Clusters", + "Connection": "ချတိ ်ဆက်မ6 ", + "Connection Types": "ချတိ ်ဆက်မ6အမျ+ိးအစားများ", + "Customers": "သံုးစဲွသူများ", + "Daly Bms": "Daly BMS", + "Dashboard": "အတိခု ျ+ပ်ေဖာ်ြပချက်", + "E-Bikes": "E-Bikes", + "GomeLong Meter": "GomeLong Meter", + "Kelin Meter": "Kelin Meter", + "Locations": "ေနရာများ", + "Maintenance": "ထိနး်သိမ်းြခင်း ", + "Messages": "Messages", + "Meters": "မီတာ", + "MicroStar Meter": "MicroStar Meter", + "Mini-Grid": "Mini-Grid", + "Mini-Grids": "Mini-Grids", + "Reports": "အစီရင်ခံစာများ", + "Sms": "စာတိမုက်ေစ့ချ", + "Solar Home Systems": "Solar Home Systems", + "Spark Meter": "Spark မီတာ", + "Steamaco Meter": " မီတာ", + "Stron Meter": "Stron Meter", + "SunKing SHS": "SunKing SHS", + "Swifta": "Swifta", + "Targets": "ပစ်မှတ်များ", + "Tariffs": "Jှ+နး်ထားများ", + "Tickets": "ကွနပ်လိနး်များ", + "Transactions": "ေငေွပးေငယွ ူ", + "Viber Messaging": "Viber Messaging", + "Wave Money": "Wave Money", + "Wavecom Payment Provider": "Wavecom Payment Provider", + "subMenu": { + "Agents": "ေအးဂျင်မ့ျား", + "Categories": "အမျ+ိးအစားများ", + "Clusters": "အစုအဖဲFများ", + "Commission Types": "ေကာ်မGှင်အမျ+ိးအစားများ", + "Config": "ပြင်ဆင်မှု", + "Customers": "ေဖာက်သည်များ", + "Groups": "အဖဲFများ", + "List": "စာရင်း", + "Message List": "Message List", + "Meter Models": "မီတာေမာ်ဒယ်များ", + "Meters": "မီတာများ", + "Mini-Grid": "မီနဂီ ရစ်", + "New Message": "Message အသစ်", + "NewSms": "စာတိအုသစ်", + "Overview": "ြခံ+ငံသု ံုးသပ်ချက်", + "Sales Accounts": "အေရာင်းအေကာင်မ့ ျား", + "Settings": "အြပင်အဆင်များ", + "Sites": "ဆိုဒ်များ", + "Sms List": "စာတို စာရင်း", + "Tariffs": "အခွနJ် ှ+နး်", + "Types": "အမျ+ိးအစားများ", + "Users": "အသံုးြပ+သူများ", + "addCluster": "Cluster ထည့်ပါ။", + "addMiniGrid": "MiniGrid ကိုထည့်ပါ။", + "addVillage": "ရွာကိုထည့်ပါ။" } + }, + "messages": { + "paymentAmountCannotBeLess": "Payment amount cannot be less than {amount}", + "successfullyCreated": "{item} Successfully Created", + "successfullyUpdated": "{item} Successfully Updated" + }, + "phrases": { + "3daysAgo": "လနွ ခ် ဲ့ေသာ ၃ ရက်", + "AppliancePayment": "စက်ပစSည်းေငေွပးေချမ6", + "AppliancePaymentReminder": "စက်ပစSည်းေငေွပးေချမ6သတိေပးချက်", + "Balance Feedback": "လက်ကျန်တUံjြပနခ်ျက်", + "LastTransactionInformationNotFound": "ေနာက်ဆံုးေငေွပးေငယွ ူသတင်း အချက်အလက်ကိုGှာမေတပFါ။", + "Low Balance Limit Notify": "လက်ကျန်ကနသ့်တ်ချက်နည်းပါးေPကာင်းအသိေပးြခင်း", + "Meter Charge": " မီတာ တာဝနခ် ံ", + "Meter Reset Failed Feedback": "မီတာြပနလ်ည်သတ်မှတ်ြခင်းမေအာင်ြမင်ေသာတUံjြပန် ချက်", + "Meter Reset Feedback": "မီတာြပနလ်ည်သတ်မှတ်ြခင်းတUံjြပနခ်ျက်", + "OverdueAppliancePaymentReminder": "ရက်လနွေ်နေသာစက်သံုးပစSည်းေငေွပးေချမ6 သတိေပးချက်", + "Pricing Details": "ေစျးJှ+နး် အေသးစိတ်", + "ResendLastTransactionInformation": "ေနာက်ဆံုးေငေွပးေငယွ ူသတင်းအချက်အလက် ကို ြပနပ် Uိပါ။", + "Sms Footer": "Sms ေအာက်ေြခမှတ်", + "Sms Header": " Smsေခါင်းစီး", + "TariffFixedCost": "အခွနအ်ခပံုေသကုနက်ျစရိတ်", + "TicketingSystemTag": "Ticketing System Tag", + "accessRate": " ဝင်ေရာက်မ6Jှ+နး် ", + "accessRateDebt": " ဝင်ေရာက်မ6Jှ+နး် အေMကး", + "accessRatePeriodInDays": "ဝင်ေရာက်မ6Jှ+နး် ကာလအပိုင်းအြခား", + "accessRatePrice": " ဝင်ေရာက်မ6Jှ+နး် ေစျးJှ+နး် ", + "addAdditionalCostComponent": "အပိုကုနက်ျစရိတ်အစိတ်အပိုင်းကိုထည့်ပါ။", + "addAdditionalSmsAndroidSetting": "အပိုေဆာင်း အက်စ်အမ်အက်စ် အင်ဒရွိ+က် ဆက်တင် ထည့်ပါ။", + "addBalance": "လက်ကျနေ်ငထွည့်ပါ။|လက်ကျနေ်ငကွိုေအာင်ြမင်စွာထည့်သွင်းခဲ့သည်။", + "addCommissionType": "ေကာ်မGှင်အမျ+ိးအစားထည့်ပါ။|ေအးဂျင်ေ့ကာ်မGှင်ကိုေအာင်ြမင်စွာ ထည့်သွင်းခဲ့သည်။", + "addCustomer": "Add Customer", + "addNewType": "အမျ+ိးအစားအသစ်ထည့်ပါ။", + "addReceipt": "ေြပစာထည့်ပါ။|ေြပစာကိုေအာင်ြမင်စွာထည့်လိကု်ပါNပီ။|ဤေအးဂျင်သ့ည် စွမ်းအင်ပံ့ပိုးေပးသူကို အေMကးမတင်ပါ။", + "addReceiptNotify": "အPကံြပ+လက်ခံြဖတ်ပိုင်းပမာဏသည်", + "addTou": "TOU ထည့်ပါ။ (အသံုးြပ+ချနိ )် ", + "agentCommissionDeleted": "ေအးဂျင်ေ့ကာ်မGှင်ကိုဖျက်လိကု်ပါNပီ။!", + "agentCommissionUpdated": "ေအးဂျင်ေ့ကာ်မGှင်ကိုြပ+ြပင်လိကု်ပါNပီ။!", + "agentTicket": "ေအးဂျင်လ့က်မှတ်|ေအးဂျင်လ့က်မှတ်များ", + "agentTransaction": " ေအးဂျင့် အေရာင်းအဝယ် | ေအးဂျင့် အေရာင်းအဝယ်များ", + "allNetworkProviders": "ကွနရ် က်ပံ့ပိုးေပးသူအားလံးု ", + "allTariffs": "အခွနJ် ှ+နး်အားလံးု", + "allTransactions": "ေငေွပးေငယွ ူအားလံးု", + "anyCategory": "မည်သည့်အမျ+ိးအစားမဆို", + "anyUser": "မည်သည့်အသံုးြပ+သူမဆို", + "apiKey": "API Key", + "apiToken": "API Token", + "appliance": "Appliance | Appliances", + "applianceCommission": "စက်ကိရိယာ ေကာ်မGှင်", + "assetType": "ပိုင်ဆိုင်မ6အမျ+ိးအစား | ပိုင်ဆိုင်မ6အမျ+ိးအစားများ", + "assignAppliance": "စက်ပစSည်းကိုသတ်မှတ်ေပးပါ။ |ေပးအပ်ထား ေသာ ပစSည်းများ | စက်ပစSည်းကို ေအာင်ြမင်စွာ သတ်မှတ်ေပးခဲ့သည်။", + "assignClusterManager": "အစုအဖဲFမနေ်နဂျာတာဝနေ်ပးပါ။", + "assignFor": "တာဝနေ်ပးထားေသာ|တာဝနေ်ပးထားခဲ့ေသာ", + "assignTo": "တာဝနေ်ပးရန်|တာဝနေ်ပးထားသည်။", + "authenticationToken": "စစ်မှနေ်Pကာင်းအေထာက်အထားြပတိကုင်", + "averagePeriod": "ပျမ်းမRကာလ", + "avgRevenue": "ပျမ်းမRဝင်ေင ", + "avgRevenuePerConnection": "ချတိ ်ဆက်မ6တစ်ခုအတကွ ် ပျမ်းမRဝင်ေင ွ", + "balanceHistories": "လက်ကျနမ် ှတ်တမ်းများ", + "batteryChargeStatus": " ဘက်ထရီအားသွင်းမ6အေြခအေန", + "batteryLevel": "Battery Level", + "batteryPvCharts": " ဘက်ထရီJှင့် PV ဇယားများ", + "batteryVoltage": "Battery Voltage", + "bulkSms": "အစုလိကု ်စာတို SMS |sms အများအြပားပUိရန် ေသချာပါသလား? | Sms(es)ေတွ ပUိ ေနတယ် ", + "businessNumber": "လပု်ငနး်နပံါတ်", + "changePassword": " စကားဝှက်ကိုေြပာင်းရန", + "closedTicket": " လက်မှတ်ပိတ်", + "clusterMap": "အစုအဖဲFေြမပံု", + "clustersDashboard": "Clusters Dashboard", + "commissionType": "ေကာ်မGှင်အမျ+ိးအစား | ေကာ်မGှင်အမျ+ိးအစားများ", + "comparedPeriod": "ကာလJှ+ိ င်းယှV်", + "componentPrice": "အစိတ်အပိုင်း ေစျးJှ+နး်", + "confirmPassword": "စကားဝှက်ကို အတည်ြပ+ပါ", + "connectedMeters": "ချတိ ်ဆက်ထားေသာ မီတာများ", + "connectedPower": "ချတိ ်ဆက်ထားေသာ ပါဝါ", + "connectionGroup": "ချတိ ်ဆက်မ6 အပု ်စု| ချတိ ်ဆက်မ6 အပု ်စုများ", + "connectionType": " ချတိ ်ဆက်မ6 အမျ+ိးအစား | ချတိ ်ဆက်မ6 အမျ+ိးအစားများ", + "connectionTypeDetails": "ချတိ ်ဆက်မ6 အမျ+ိးအစား အေသးစိတ်", + "conversationId": " စကားဝိုင်း Id", + "createFirsRecord": "သင်၏ပထမဆံုးမှတ်တမ်းကိုဖနတ် ီးပါ။| ပထမဆံုး {data} မှတ်တမ်းကို ဖနတ် ီးပါ။", + "createdAt": "တငွ ် ဖနတ် ီးခဲ့သည်။", + "createdDate": "ဖနတ် ီးသည့်ရက်စဲွ", + "customerList": " ေဖာက်သည် စာရင်း", + "dataLogger": "ေဒတာ-ေလာဂ့ ျာ | ေဒတာေလာဂ့ ျာကို ရပါNပီ။ ေဒတာေလာဂ့ ျာကို ပိတ်ထားသည်။", + "deferredDebt": "ေရXYဆိုင်းအေMကး", + "deferredPayment": "ေရXYဆိုင်းေပးေချမ6", + "deleteAgent": "Agent ကိုဖျက်ပါ။ |ေအးဂျင်က့ ို ေအာင်ြမင်စွာ ဖျက်လိကု ်ပါNပီ။ | ေအးဂျင်က့ ို အပ်ဒိတ် လပု ်NပီးပါNပီ။ |{name} ကို ဖျက်ပစ်မည်ဟု အတည်ြပ+ပါသည်။", + "deleteAgentCommission": "ေအးဂျင်ေ့ကာ်မGှင်ကိုဖျက်ပါ။|{commissionName}ကိုဖျက် ပစ်မည်ဟု က[Jပု် ်အတည်ြပ+ပါသည်။", + "deleteAppliance": "Delete Appliance", + "deleteAssetType": "ပိုင်ဆိုင်မ6အမျ+ိးအစားကိုဖျက်ပါ။ | ပိုင်ဆိုင်မ6 အမျ+ိးအစားကို ေအာင်ြမင်စွာ ဖျက်လိကု ်ပါNပီ။ | ပိုင်ဆိုင်မ6အမျ+ိးအစားကို ဖျက်ရန် ေသချာပါသလား။ | ပိုင်ဆိုင်မ6အမျ+ိးအစားကို အပ် ဒိတ်လပု ်NပီးပါNပီ။", + "deleteCustomer": "ဝယ်ယူသူကိုဖျက်ပါ။ | ဝယ်ယူသူ ေအာင်ြမင်စွာ ဖျက်လိကု ်ပါNပီ", + "deleteCustomerNotify": "{name}{surname} ကို ဖျက်ပစ်မည်ဟု အတည်ြပ+ပါသည်' ", + "deleteMeter": "မီတာကိုဖျက်ပါ။ |{serialNumber}ကို ဖျက်ရန် အတည်ြပ+ပါသည်", + "deleteMeterNotify": "မီတာကို ဖျက်ရန် အတည်ြပ+ရပါမည်။ | မီတာကို ေအာင်ြမင်စွာ ဖျက်လိကု ်သည်", + "distributeThis": "Please distribute this to your customers and ask them to send their meter number to register our Viber communication system.", + "downPayment": "Down Payment", + "dueDate": "ေနာက်ဆံုးရက်", + "editConnectionGroup": "ချတိ ်ဆက်မ6အဖဲFကို တည်းြဖတ်ပါ။ |ဤချတိ ်ဆက်မ6အဖဲFအမည်ကိုေြပာင်းရန် ေသချာပါသလား။ |ချတိ ်ဆက်မ6အဖဲFကို အပ်ဒိတ်လပု ်NပီးပါNပီ။", + "editConnectionType": "ချတိ ်ဆက်မ6အမျ+ိးအစားကို တည်းြဖတ်ပါ။", + "editConnectionTypeNotify": " ချတိ ်ဆက်မ6အမျ+ိးအစားအမည်ကို ေအာင်ြမင်စွာ အပ်ဒိတ်လပု ် ထားသည်။ |{name}အတကွ ် ချတိ ်ဆက်မ6 အမျ+ိး အစားအမည်ကိုေြပာင်းရန် ေသချာပါသလား။ ", + "editRate": "တည်းြဖတ်Jှ+နး်ထား", + "editSubConnectionType": "Sub Connection အမျ+ိးအစားကို တည်းြဖတ်ပါ။", + "editSubConnectionTypeNotify": "ဤချတိ ်ဆက်မ6ခဲွ အမျ+ိးအစား ကိုေြပာင်းရန် ေသချာပါ သလား။ | ချတိ ်ဆက်မ6ခဲွကို ေအာင်ြမင်စွာ မွမ်းမံNပီး ပါNပီ။", + "enableAccessRate": "ဝင်ေရာက်မ6Jှ+နး်ဖွင်ပ့ါ။", + "enableMinimumPurchaseAmount": "Enable Minimum Purchase Amount", + "energyCommission": "စွမ်းအင် ေကာ်မGှင်", + "expireSession": "ဆက်Gှင်သက်တမ်းကုနေ်တာမ့ည်။", + "expireSessionLabel": "သင်ဆ့က်Gှင်အပိုင်းကိုေနာက်ထပ်60(ေြခာက်ဆယ်)မိနစ်အထိ သက်တမ်းတိးုလိပုါကဤဝင်းဒိးုကိုအတည်ြပ+ပါ။| သင်ဆ့က်Gှင်သည်{expires_in}စကန]်တ့ွင်သက်တမ်းကုနဆ်ံုးပါသည်။", + "financeOverview": "ဘ^ာေရး ြခံ+ငံသု ံုးသပ်ချက် (ကာလ-{ကာလ})", + "flatLoadLimit": "ပံုေသဝန်ကနသ့်တ်", + "flatPrice": "ပံုေသ ေစျးJှ+နး်", + "forgotPassword": " စကားဝှက်ကိုေမ့ေနပါသလား | စနစ်တငွ ် အသံုးြပ+ေသာ သင်အ့ ီးေမးလ် လိပ်စာကို ထည့်သွင်းပါ။", + "fromDate": "ရက်စဲွ မှ", + "getUpdatesFrom": "အပ်ဒိတ်ကို {x}မှ ရယူပါ", + "inReturn": "၌ြပနလ်ာ", + "inXSeconds": "{x}စကနအ့်တငွ်း", + "incomingTransactions": "အဝင် ေငလွ ဲမX 6များ", + "isPrimary": "မူလ ြဖစ်ပါသလား", + "jobTitle": "အလပု ်အကိုင်အမည်", + "lastDataReceived": "Last Data Received", + "lastPayment": "ေနာက်ဆံုးေငေွပးေချမ6", + "lastReceipts": "ေနာက်ဆံုး လက်ခံြဖတ်ပိုင်းများ", + "lastSyncDate": "ေနာက်ဆံုးစင်ခ့ ်/ထပ်တြူပ+ြခင်းလပု ်သည့်ရက်စဲွ", + "lastTransactions": "ေနာက်ဆံုး ေငလွ ဲမX 6များ", + "lastUpdate": "ေနာက်ဆံုး အပ်ဒိတ် / မွမ်းမံ", + "lastXDays": "ေနာက်ဆံုး {x}ရက်", + "listOfTickets": "လက်မှတ်များစာရင်း", + "livingIn": "တငွ ် ေနထိုင်ေန", + "loadingChartData": "ဇယားအချက်အလက် ေဒတာကို တင်ေနသည်။", + "loadingData": "အချက်အလက် ေဒတာကို တင်ေနသည်။", + "loanRate": "ေချးေငJွ ှ+နး်", + "logOut": "ထွက်လိုက်ပါ။", + "loginNotify": "သင်၏Mini-Gridကိုစီမံခန]်ခ့ွဲရန်အလယွ ်ဆံုးနည်းလမ်း|အေထာက်အထား စိစစ်ြခင်း မေအာင်ြမင်ပါ။ သင်၏ အေထာက်အထားများကိုစစ်ေဆးပါ။", + "manufacturerName": "Manufacturer Name", + "mapProvider": "ေြမပံု ပံ့ပိုးသူ", + "maxCurrent": "မက် လက်Gှိ", + "merchantId": "Merchant ID", + "messageNotify": "မက်ေဆ့ဂျတ်ငွ်စာလံးု3လံးုထက်ပို၍ပါဝင်သင်သ့ည်။", + "messageText": "စာတို စာသား", + "meterDetail": " မီတာအေသးစိတ် | မီတာအေသးစိတ်များ", + "meterDetailNotify": "မေမRာ်လင်ထ့ားေသာအမှားအယွင်း| သင်စ့နစ်စီမံခန]်ခ့ွဲသူထံဆက်သွယ်ပါ။|ပိုင်Gှင်အသစ်လိအုပ်သည်!", + "meterDetailNotify2": "ပိုင်Gှင်အသစ်ကို ေရွးချယ်ပါ။ | မီတာကိုြပနလ်ည်သတ်မှတ်ေပးပါသလား။|မီတာကို{name}မှ{newName}သUိသတ်မှတ်ေပးရန် ေသချာပါသလား။?", + "meterReadings": "မီတာဖတ်ြခင်း", + "meterTransaction": "မီတာလဲေXြပာင်းြခင်း|မီတာလဲေXြပာင်းြခင်းများ", + "meterTypes": "မီတာအမျ+ိးအစားများ", + "miniGridMap": "မီနဂီရစ်ေြမပံု", + "minimumPayableAmount": "Minimum Payable Amount (access to the system for 7 days) | Minimum Payable Amount (access to the system for 30 days)", + "minimumPurchaseAmount": "Minimum Purchase Amount", + "minimumPurchaseAmountDescription": "This field represents minimum price of the purchase the customer can do. You can leave it as zero If you do not want to apply this feature", + "missingField": "ေပျာက်ဆံုးေနေသာ အကွက်", + "mobileProvider": "မိုဘိုင်းဝနေ်ဆာင်မ6ေပးသူ", + "modelName": "Model Name", + "monthlyAvg": "လစV် ပျမ်းမR", + "monthlyReports": "လစV် အစီရင်ခံစာများ", + "mpesaReceipt": "Mpesa ေြပစာ", + "mustBeNegative": "Negative ြဖစ်ရမယ်။", + "namingCluster": "Cluster အမည်ေပးြခင်း", + "newAddress": "လိပ်စာအသစ်", + "newAgent": "ကိုယ်စားလှယ်အသစ် | ကိုယ်စားလှယ်ကို ေအာင်ြမင်စွာ ထည့်သွင်းခဲ့သည်။", + "newAppliance": "New Appliance | Appliance Registered Successfully", + "newAssetType": " ပိုင်ဆိုင်မ6အမျ+ိးအစားအသစ် | ပိုင်ဆိုင်မ6 အမျ+ိးအစား မှတ်ပံုတင်NပီးပါNပီ။", + "newCategory": "အမျ+ိးအစားအသစ် | အမျ+ိးအစားအသစ်ကို ေအာင်ြမင်စွာ ထည့်သွင်းခဲ့သည်။", + "newCluster": " Cluster အသစ် |{cluster အမည်}အတကွ ် ရလဒ်မGှိပါ။ သင်၏ Cluster အစုအေဝးဧရိယာကိုဆဲွရနအ်တကွ်Drawpolygontoolကိုအသံုးြပ+ပါ။", + "newClusterNotify": " သင်သည် အစုအေဝး cluster သU ိ အမည် တစ်ခု မထည့်ခဲ့ပါ။ ေကျးဇူးြပ+၍ အစုအေဝးသUိ အမည်တစ်ခု သတ်မှတ်ေပးပါ။ | အစုအဖဲFတည်ေနရာကို ေရွးချယ်မထားပါ | အစုအေဝးအတကွ ် တည်ေနရာကို ေရွ းချယ်/ဆဲွပါ။", + "newClusterNotify2": "Cluster Manager ကို ေရွးမထားပါ | ေကျးဇူးြပ+၍အစုအဖဲFမနေ်နဂျာကိုေရွးချယ်ပါ။|သင်ထည့်သွင်းထားေသာClusterကိုေအာင်ြမင်စွာ သိမ်းဆည်းထားသည်။", + "newComment": "မှတ်ချက် အသစ်", + "newConnection": "ချတိ ်ဆက်မ6အသစ် | ချတိ ်ဆက်မ6အသစ်များ", + "newConnectionGroup": "ချတိ ်ဆက်မ6အဖဲFအသစ် | ချတိ ်ဆက်မ6အဖဲF တငွ ် စာရင်းသွင်းထား ပါသည်။", + "newConnectionType": "အသစ်ချတိ ်ဆက်မ6အမျ+ိးအစား | ချတိ ်ဆက်မ6 အမျ+ိးအစား မှတ်ပံုတင်ထားသည်။", + "newConnectionsTarget": "ချတိ်ဆက်မ6အသစ်/ပနး်တိငု်", + "newEBike": "New E-Bike | New E-Bike created successfully", + "newMaintenanceRequest": "အသစ်ြပ+ြပင်ထိနး်သိမ်းေရးေတာင်းဆိုမ6|တာဝနက် ိုေအာင်ြမင်စွာ ဖနတ် ီးခဲ့သည်။ လကူ ိုလည်း sms ြဖင့် အေPကာင်း Pကားပါမည်။", + "newMaintenanceUser": "ြပ+ြပင်ထိနး်သိမ်းေရးဝနေ်ဆာင်မ6ေပးသူအသစ်|ြပ+ြပင်ထိနး်သိမ်းသူ ဖနတ် ီးထားသည်။", + "newMeterType": "မီတာအမျ+ိးအစားအသစ် | မီတာ အမျ+ိးအစား ထည့်သွင်းမ6 ေအာင်ြမင်Nပီး။", + "newMiniGrid": "မီနဂီရစ်အသစ်|သင်ထည့်သွင်းထားသည့်Mini-Gridကိုေအာင်ြမင်စွာ သိမ်းဆည်းထားသည်။", + "newOwner": "ပိုင်Gှင် အသစ်", + "newShs": "New Solar Home System | New Solar Home created successfully", + "newSms": "Sms အသစ်", + "newSubConnectionType": "Sub Connection အမျ+ိးအစား အသစ် | Sub Connection Type တငွ ် စာရင်းသွင်းထားသည်။", + "newTarget": "ပစ်မှတ်အသစ် |ပစ်မှတ်အတကွ ် ဦးတည်ရာကို ေရွးပါ။", + "newTargetNotify": "လိအုပ်ေသာအကွက်အားလံးုကိုြဖည့်စွက်ပါ။|ပစ်မှတ်ကိုေအာင်ြမင်စွာ သိမ်းဆည်းထားသည်။", + "newTariff": "အခွနJ်ှ+နး်သစ်|အေကာက်ခွနအ်သစ်မှတ်ပံုတင်NပီးပါNပီ။", + "newTariffLabels": "kWhေစျးJှ+နး်(ေနာက်ဆံုးဂဏနး်Jှစ်လံးုသည်ဒဿမJှစ်ခုဥပမာ-100=1.00ကိုကိုယ်စား ြပ+သည်)|ဤအကွက်ကိုအသံုးြပ+ရနအ်တကွ်၊အသံုးြပ+မည့်မီတာခများသည်အသံုးြပ+ချနိအ်တကွ် သင်ေ့လျာ်ရပါမည်။", + "newTicket": "လက်မှတ် အသစ် ", + "newTicketingUser": "လက်မှတ်အသံုးြပ+သူအသစ်", + "newUser": "အသံုးြပ+သူအသစ် |အသံုးြပ+သူအသစ် ဖနတ် ီးထားသည်။", + "newVillage": "ေကျးရွာအသစ်", + "newVillageNotify": "သင်ထည့်ထားေသာေကျးရွာကို ေအာင်ြမင်စွာ သိမ်းဆည်းထားသည်။", + "noData": "ေဒတာမGှိပါ။|ေဒတာမေတပFါ", + "noDataFoundFor": "{ေဒတာ}အတကွ်ေဒတာမေတပFါ", + "noOne": "ဘယ်သူမှ", + "onlyApproved": "အတည်ြပ+ြခင်းသာြဖစ်သည်", + "onlyRejected": "ြငင်းပယ်ြခင်းသာြဖစ်သည်", + "openTicket": "မှတ်တမ်းအသစ်ဖွင်ြ့ခင်း", + "orderId": "Order ID", + "originatorConversationId": "အစြပ+သူ စကားဝိုင်း အိငု ်ဒီ", + "outgoingSms": "Outgoing sms", + "overDueReminderRate": "သတ်မှတ်ရက်ထက်ေကျာ်လနွေ်သာသတိေပးချက်Jှ+နး်ထား(ေန)့", + "paginateLabels": "ပါဝင်မ6 {စုစုေပါင်း}၏ {မှ} မှ {သU ိ} ကို ြပသသည်။", + "paidFor": "အတကွ ် ေပးခဲ့သည်", + "passwordProtected": "စကားဝှက် အကာအကွယ် ဇုန် | ဤဧရိယာသUိ ဝင်ေရာက်ရန် စကားဝှက်ကို ထည့်သွင်းပါ။", + "paymentDistribution": "ေငေွပးေချမ6ြဖနေ့်ဝြခင်း", + "paymentFlow": "ေငေွပးေချမ6စီးဆင်းမ6|လစV်ပျမ်းမR{ေငေွPကး} ေကျာ်လနွ ် {အေရအတကွ ်}လများ", + "paymentOverview": "ေငေွပးေချမ6ြခံ+ငံသုံုးသပ်ချက်{ကာလ}", + "paymentRequests": "ေငေွပးေချမ6ေတာင်းဆိုမ6များ", + "paymentService": "ေငေွပးေချမ6ဝနေ်ဆာင်မ6", + "paymentType": "ေငေွပးေချမ6အမျ+ိးအစား", + "perPage": " စာမျက်Jှာ တစ်ခုစီ", + "personalInformation": "Personal Information", + "pleaseShareThis": "Please share this link with your customers for making their online payments.", + "preparingChartData": "ဇယားေဒတာ ြပင်ဆင်ြခင်း", + "processTime": "လပု်ငနး်စV်အချနိ", + "processedTransactions": "စီမံထားေသာ ေငလွ ဲမX 6များ", + "providerSpecificInformation": "ပံ့ပိုးေပးသူ၏ သီးြခား အချက်အလက်", + "purchaseCode": "အဝယ်ကုဒ်", + "rateType": "Rate Type", + "ratesCount": "Jှ+နး်ထားများေရတကွ ်|ပိုင်ဆိုင်မ6Jှ+နး်ထားကိုေအာင်ြမင်စွာအပ်ဒိတ်လပု် ထားသည်။", + "redirectLabel": "ဤေနရာကိုအသံုးြပ+ရနအ်တကွ်သင်သည်{imperativeItemမGှိမြဖစ် အရာ}ကို ထည့်ရပါမည်", + "referenceId": "Reference ID", + "refreshData": "Refresh Data", + "registeredClusters": "မှတ်ပံုတင်ထားေသာ အစုအဖဲFများ", + "registeredCustomers": "မှတ်ပံုတင်ထားေသာ ေဖာက်သည်များ", + "relocateMeter": "မီတာေနရာေြပာင်း|ေရွးချယ်ထားေသာမီတာများကိုေနရာေြပာင်းလိသုည်မှာ ေသချာပါသလား။ | မီတာကို ေအာင်ြမင်စွာ ေရXYေြပာင်းခဲ့ပါNပီ။", + "remainingAmount": "လက်ကျနပ် မာဏ", + "reminderRate": "သတိေပးချက်Jှ+နး် (ေန)့", + "responsibleFor": "(Mini-Grid)အတကွ ် တာဝနယ် ူ", + "revenueAnalysis": " ဝင်ေငွ ခဲွြခမ်းစိတ်ြဖာြခင်း။", + "revenueColumns": " ဝင်ေငွ ေကာ်လံများ", + "revenueLine": "ဝင်ေငလွ ိငု ်း", + "revenuePerCustomerType": "ေဖာက်သည်အမျ+ိးအစားအလိကု ် ဝင်ေငွ |ေရွးချယ်ထားေသာကာလ အတကွ ် ေဒတာမGှိပါ။", + "revenuePercentiles": "ဝင်ေငွရာခိုင်Jှ+နး်များ", + "revenueTargetsPerCustomerType": "ေဖာက်သည်အမျ+ိးအစားအလိကု်ဝင်ေငပွစ်မှတ်များ| ရည်မှနး်ထားေသာဝင်ေငွ ", + "revenueTrends": "ဝင်ေငလွမ်းေPကာင်းများ", + "riskBalance": "အJရfာယ်/စွနစ့်ားရေြခလက်ကျန", + "sameDayLastWeek": "ယခင်အပတ်က ထိုေန့", + "searchResultFor": "Gှာေဖွမ6 ရလဒ်", + "secretKey": "Secret Key", + "selectColor": "အေရာင် ေရွးပါ။", + "selectDevice": "Select a Device to bind with this appliance", + "selectMiniGrid": "မီနဂီရစ်ကိုေရွးပါ။|မီနဂီရစ်Data-loggerသည်အသက်ဝင် ပါသည်။", + "selectPeriod": "ဝင်ေငေွဒတာအတကွ်ကာလတစ်ခုကိုေရွးပါ", + "sellAsset": "ပိုင်ဆိုင်မ6ကိုေရာင်းပါ။ | ပစSည်းအသစ်ကို ေအာင်ြမင်စွာ ေရာင်းချJငုိ ်ခဲ့သည်။ | ပိုင်ဆိုင်မ6ကို{ကုနက်ျစရိတ်အတကွ်}ေရာင်းချရန်ေသချာပါသလား။", + "sentDate": "ေပးပUိသည့်ေန]စ့ွဲ", + "serialNumber": "အမှတ်စV် နပံ ါတ်", + "setPoints": "အမှတ်များ သတ်မှတ်ပါ။", + "signIn": "ဆိုင်းအင်လပု ်ြခင်း / ဝင်ေရာက်ြခင်း", + "smsHistory": "Sms မှတ်တမ်း", + "smsList": " Sms စာရင်း ", + "smsListNotify": "မက်ေဆ့ဂျတ်ငွ်စာလံးု၃လံးုထက်ပိုပါဝင်သင့်သည်။SmsများပUိသည်", + "socialTariff": "လမူ6ေရးအခွနအ်ခ|ကီလိဝုပ်တစ်နာရီေစျးJှ+နး်| ကနဦး စွမ်းအင်ဘတ်ဂျက်", + "socialTariffLabels": "လမူ6ေရးအခွနအ်ခြဖင့်ေနစ့V်ေထာက်ပံ့ေPကး | အများဆံုး စုပံုထားေသာ စွမ်းအင်", + "socialTariffOptions": "လမူ6ေရးအခွနအ်ခေရွးချယ်မ6များကိုြပပါ။|လမူ6ေရးအေကာက်ခွန် ေရွးချယ်စရာများကို ဝှက်ထားပါ", + "soldAppliances": "ပစSည်းကရိယာများ ေရာင်းချခဲ့ြခင်း", + "soldAssets": "ပိုင်ဆိုင်မ6များကို ေရာင်းချခဲ့သည်။", + "soldDate": "ေရာင်းချသည့်ေန]စ့ွဲ", + "soldEnergy": "စွမ်းအင် ေရာင်းချခဲ့ြခင်း (အေရာင်းအဝယ်အေပg အေြခခံ၍)", + "somethingWentWrong": "တစ်ခုခု မှားသွားသည်။", + "sparkMeterNotify": "ေဖာက်သည်များကို ထပ်တြူပ+ရန် မီတာ ေမာ်ဒယ်များကို ထပ်တြူပ+ရပါမည်။ |ေဖာက်သည်များကိုတNပိ+င်တည်းလပု်ေဆာင်ရန်အခွနစ်ည်းPကပ်မ6များကိုထပ်တြူပ+ရပါမည်", + "statusNow": "ယခုအဆင်အ့တနး်", + "stepperLabels": "MiniGridData-logger၏အခမဲ့ကနသ့်တ်ချက်သည်ေကျာ်လနွသ်ွားပါ Nပီ။ေအာက်ေဖာ်ြပပါသင်၏အသက်သွင်းထားေသာမီနဂီရစ်စာရင်း။|၎င်းတUိထဲမှတစ်ခုကိုပိတ်ရန် Jှစ်သက်Jငုိ ် သည်၊ သUိမဟတု ် ေအာက်တငွ ် ေနာက်ထပ် slot များကို မှာယူJငုိ ်ပါသည်။", + "stepperLabels2": "ဝယ်ယူမ6တငွ်ေပးထားသည့်ကုဒ်ကိုiုိက်ထည့်ြခင်းြဖင့်ေငေွပးေငယွူကို အNပီးသတ်ပါ။|သင်သည်မီနဂီရစ်ေဒတာကိုမှတ်တမ်းတင်ရနအ်တကွ်ေနာက်ထပ်slotတစ်ခုကို သင်ဝယ်ယူNပီးြဖစ်သည်။", + "stepperLabels3": "စနစ်တငွ်ထိနး်သိမ်းသူအသစ်များထည့်ရန်ေနာက်ထပ်slotငါးခုကိုသင် ဝယ်ယူထားသည်။|သင်ေ့ငေွပးေချမ6ကိုက[Jပု််တUိလပု်ေဆာင်၍မရပါ။ေကျးဇူးြပ+၍စီမံခန]်ခ့ွဲသူကို ဆက်သွယ်ပါ။", + "stepperLabels4": "အခမဲ့ြပ+ြပင်ထိနး်သိမ်းေရးအသံုးြပ+သူများ၏ကနသ့်တ်ချက်သည်ေကျာ် လနွ သ် ွားပါNပီ... | ေအာက်ပါ အထိုင် slot များကို မှာယူJငုိ ်ပါသည်။", + "subConnectionTypes": "ချတိ ်ဆက်မ6 အခဲွ အမျ+ိးအစားများ", + "subTargets": "ပစ်မှတ်များ", + "subTypes": "အမျ+ိးအစားခဲွများ", + "successfullyUpdated": "Successfully Updated", + "swiftaTransaction": "SwiftaTransaction", + "targetsForConnectionTypes": "ချတိ ်ဆက်မ6 အမျ+ိးအစားများအတကွ ် ပစ်မှတ်များ", + "tariffDetail": "အခွနအ်ခအေသးစိတ်|ဤအခွနအ်ခကိုေသချာစွာမွမ်းမံNပီးNပီလား?", + "tariffNotify": "အခွနအ်ခကိုေအာင်ြမင်စွာဖျက်လိကု်ပါNပီ။|မီတာအသံုးြပ+မ6အေပgအခွန် Jှ+နး်ထားကိုေအာင်ြမင်စွာေြပာင်းလဲခဲ့သည်။|ဤအခွန်အခသည်မီတာ၏{အသံုးြပ+မ6အေရအတကွ ်ြဖင့် အသံုးြပ+ပါသည်။ ဤအခွန် အခကို အပ်ဒိတ်လပု ်ရန် ေသချာပါသလား။", + "tariffNotify2": "ဤအခွနအ်ခကိုဖျက်ရန်ေသချာပါသလား။|ဤအခွနအ်ခသည်မီတာ၏ {အသံုးြပ+မ6အေရအတကွ်}ြဖင့်အသံုးြပ+ပါသည်။မီတာအခွနအ်ခများေြပာင်းလဲရန်ဆံုးြဖတ်ရပါမည်။ဤ အေကာက်ခွနက် ို ဖျက်ရန် ေသချာပါသလား", + "thirdPartyTransaction": "အြခားသူတစ်ဦးြဖင့်ေငလွ ဲြXခင်း", + "thisKeyWillUseIn": "၎င်းတUိ၏ေနာက်ဆံုးေငေွပးေငယွူသတင်းအချက်အလက်ကိုရယူလိေုသာ ေဖာက်သည်များအတကွ်ေနာက်ဆံုးေငေွပးေငယွူသတင်းအချက်အလက်ေသာခ့ျက်ကိုြပနလ်ည်ေပးပUိပါ။ ေဖာက်သည်များသည်၎င်းတUိ၏ေနာက်ဆံုးေငေွပးေငယွူသတင်းအချက်အလက်ကိုရယူလိေုသာအခါ တငွ်၎င်းတUိသည်ဤေသာြ့ဖင့်စတင်သည့်SMSစာတိတုစ်ေစာင်ေပးပUိjNပီးသံုးစဲွသူမီတာအမှတ်စV် နပံါတ်ြဖင့်ဆက်လက်လပု်ေဆာင်ရနလ်ိအုပ်သည်။", + "thisPeriod": "ဤကာလ", + "ticketCategories": "လက်မှတ် အမျ+ိးအစားများ", + "ticketDetails": "လက်မှတ်အေသးစိတ်", + "ticketLabels": "ထိုလက်မှတ်များကိုြပင်ပလူ(ဝနထ်မ်းမဟတု်)ထံသUိေပးေဆာင်မည်ြဖစ်သည်။ |မည်သည့်ေမးခွနး်ြဖင်မ့ဆို{အီးေမးလ်Jှင့်ဆက်သွယ်ပါ။}", + "ticketNotify": "လက်မှတ်ကို ေအာင်ြမင်စွာ ပိတ်လိကု ်ပါNပီ။ | မှတ်ချက်ကို ေအာင်ြမင်စွာေပးပU ိပါ။.", + "ticketUserNotify": "User added successfully. | {tag} not found in the Ticketing system!", + "ticketingSystemTag": "Ticketing System Tag", + "ticketsOverview": "လက်မှတ်များ ြခံ+ငံသု ံုးသပ်ချက် | ဖွင်လ့ ှစ်ထား ေသာ လက်မှတ်များသည် ဘယ်ဘက်တငွ ်GှိNပီး ညာဘက်ြခမ်းတငွ ် ေြဖGှင်းထား ေသာ လက်မှတ်များ, လက်မှတ်အသံုးြပ+သူ အသိေပးချက်- အသံုးြပ+သူကို ေအာင်ြမင်စွာ ထည့်သွင်းခဲ့သည်။ | လက်မှတ်ေရာင်းသည့်စနစ်တငွ ် {tagတဂ်}မေတပFါ ", + "toDate": "ယေနအ့ထိ", + "totalCost": "စုစုေပါင်းကုနက်ျစရိတ်", + "totalRevenue": "စုစုေပါင်း ဝင်ေင ွ", + "transactionCancelled": "Transaction cancelled", + "transactionId": "ေငေွပးေငယွ ူID", + "transactionIdentifier": "ေငေွပးေငယွ ူသတ်မှတ်စနစ်", + "transactionNotify": "Jှ+ိင်းယှV်ရန်အချက်အလက်လံေုလာက်မ6မGှိပါ။", + "transactionProcessing": "ေငေွပးေငယွ ူေဆာင်ရွက်ြခင်း", + "transactionReference": "Transaction Reference", + "untraceableTransaction": "Untraceable transaction", + "updateAddress": "လိပ်စာ မွမ်းမံပါ", + "userForOutsourcing": "ြပင်ပအရင်းအြမစ် အသံုးြပ+သူ", + "userId": "User ID", + "userList": "အသံုးြပ+သူစာရင်း", + "userManagement": "အသံုးြပ+သူစီမံခန]်ခ့ွဲမ6", + "userTicket": "အသံုးြပ+သူလက်မှတ် | အသံုးြပ+သူလက်မှတ်များ", + "validUntil": "သည်အထိ အကျ+ံးဝင်သည်။", + "waveComTransaction": "WaveCom Transaction", + "waveMoneyTransaction": "Wave Money Transaction", + "weeklyReports": "အပတ်စV် အစီရင်ခံစာများ", + "wholeVillage": "တစ်ရွာလံးု ", + "writeMessage": " စာတို ေရးပါ။...", + "wrongPassword": "Wrong password", + "yourAuthTokenForSwifta": "Your auth token for Swifta Payments, please share this with Swifta to use this token in their API requests.", + "yourMessage": "သင်၏မက်ေဆ့ချက် ယခုကဲ့သUိမျ+ိး ြမင်ရလိမ့်မည်။" + }, + "words": { + "access": "သံုးစဲွခွင့် ", + "activate": "အသက်သွင်း | အသက်သွင်းNပီးပါNပီ", + "add": "ထည့်သွင်း | ထည့်သွင်းပါNပီ", + "address": "လိပ်စာ | လိပ်စာများ", + "agent": "ေအးဂျင့် |ေအးဂျင်မ့ျား", + "all": "အားလံးု ", + "amount": "ပမာဏ", + "analysis": "ခဲွြခမ်းစိတ်ြဖာြခင်း", + "annually": "Jှစ်စV်", + "appliance": "စက်ကိရိယာ | စက်ကိရိယာများ", + "apply": "ေလRာက်ထားပါ။", + "asset": "ပိုင်ဆိုင်မ6", + "assign": "တာဝနေ်ပး|တာဝနေ်ပးထားသည်။", + "attention": "သတိြပ+ အာiုံစိုက်ြခင်း", + "authorize": "လပု်ပိုင်ခွင့်|လပု်ပိုင်ခွင်ြ့ပ+ထားြခင်း", + "authorized": "Authorized", + "balance": "လက်ကျန", + "base": "အေြခ", + "basic": "အေြခခံ", + "battery": "ဘက်ထရီ | ဘတk ရီများ", + "birthday": "ေမွးေန့", + "body": "ခJာlကိုယ်ထည်", + "callback": "ြပနေ်ခgပါ", + "cancel": "ဖျက်သိမ်းသည် | ဖျက်သိမ်းလိကု ်Nပီး", + "category": "အမျ+ိးအစား | အမျ+ိးအစားများ", + "city": "Nမိm | Nမိmများ", + "close": " ပိတ်သိမ်းသည် | ပိတ်သိမ်းလိကု ်Nပီး", + "cluster": "အစုအဖဲF | အစုအဖဲFများ", + "collapse": "Nပိ+ကျသည်။", + "color": "အေရာင်", + "column": "ေကာ်လံ | ေကာ်လံများ", + "comment": "မှတ်ချက် | မှတ်ချက်များ", + "commission": "ေကာ်မGှင်", + "compared": "Jှ+ိ င်းယှV်", + "confirm": "အတည်ြပ+ | အတည်ြပ+ခဲ့သည်။", + "connect": "ချတိ ်ဆက် | ချတိ ်ဆက်ထားသည်။", + "connection": "ချတိ ်ဆက်မ6 | ချတိ ်ဆက်မ6များ", + "connectivity": "ချတိ ်ဆက်မ6", + "consumption": "စားသံုးမ6", + "continue": "ဆက်လက်", + "conversation": "စကားဝိုင်း", + "cost": "ကုနက်ျစရိတ်", + "create": "ဖနတ် ီး | ဖနတ် ီးခဲ့သည်။", + "credit": "ခရက်ဒစ် အေMကး", + "currency": "ေငေွPကး", + "customer": "ေဖာက်သည် | ေဖာက်သည်များ", + "date": "ရက်စဲွ", + "day": "ေန့|ေနစ့V်", + "deactivate": "ပိတ်ရန် | ပိတ်ထားသည်။", + "delete": "ဖျက်ပါ။", + "description": "ေဖာ်ြပချက်", + "detail": "အေသးစိတ် | အေသးစိတ်များ", + "device": "device", + "deviceType": "Device Type", + "devices": "Devices", + "disable": "လပု ်ေဆာင်၍မရ", + "dismiss": "ပယ်ရန", + "done": "NပီးNပီ။", + "download": "ေဒါင်းလဒု ်လပု ်ပါ။", + "eBike": "E-Bike | E-Bikes", + "edit": "တည်းြဖတ်ပါ။", + "education": "ပညာေရး", + "email": "အီးေမးလ်", + "employee": "ဝနထ်မ်း", + "enable": "ဖွင်ပ့ ါ။", + "encryption": "ကုဒ်ဝှက်ြခင်း", + "end": "အဆံုး", + "energy": "စွမ်းအင် | စွမ်းအင်များ", + "expand": "ချYဲထွင်ပါ", + "female": "အမျ+ိးသမီး", + "file": "ဖိုင်", + "filter": "ဇကာ", + "finance": "ဘ^ာေရး", + "for": "ဖUိ", + "gender": "ကျား၊မ", + "generate": "ထုတ်လပု ်ရန် | ထုတ်လပု ်ေပးခဲ့သည်။", + "group": "အပု ်စု | အပု ်စုများ", + "history": "သမိုင်း | သမိုင်းများ", + "host": "လက်ခံသူ", + "id": "ID", + "incoming": "Incoming", + "key": " အဓိကအချက်", + "last": "Last", + "latitude": "Latude", + "line": "လိငု ်း", + "list": "စာရင်း", + "location": "တည်ေနရာ | တည်ေနရာများ", + "lock": "Lock", + "login": "ေလာဂ့ ်အင်", + "longitude": "ေလာင်ဂျကီျ+", + "maintenance": "ထိနး်သိမ်းြခင်း", + "male": "အမျ+ိးသား", + "manufacturer": "ထုတ်လပု ်သူ | ထုတ်လပု ်သူများ", + "map": "ေြမပံု", + "message": "စာတို|စာတိမုျား", + "meter": "မီတာ | မီတာများ", + "miniGrid": "မီန-ီ ဂရစ်", + "minimumPayableAmount": "Minimum Payable Amount (access to the system for 7 days)", + "mobile": "မိုဘိုင်း", + "month": "လ | လစV်", + "name": "အမည်", + "network": "ကွနရ် က်", + "new": "အသစ်", + "next": "ေနာက်တစ်ခု", + "no": "မဟတု ်/မမှန", + "notice": "အသိေပးစာ", + "offline": "လိငု ်းပိတ်", + "online": "အနွ လ် ိငု ်း/အနွ လ် ိငု ်းဖွင်'့", + "open": "ဖွင်လ့ ှစ် | ဖွင်လ့ ှစ်ခဲ့", + "outgoing": "အထွက်", + "outsourcing": "ြပင်ပအရင်းအြမစ်", + "overview": "ြခံ+ငံသု ံုးသပ်ချက်", + "owner": "ပိုင်Gှင်", + "paidFor": "အတကွ ် ေပးခဲ့သည်။", + "password": "စကားဝှက်", + "payment": "ေငေွပးေချမ6", + "people": "လမူ ျား", + "percentile": "ရာခိုင်Jှ+နး် |ရာခိုင်Jှ+နး်များ", + "period": "ကာလ", + "phase": "အဆင်'့", + "phone": "ဖုနး် ", + "port": "ဝင်ေရာက်ရနေ်နရာ", + "previous": "ယခင်", + "price": "ေစျးJှ+နး် ", + "primary": "မူလ", + "process": "လပု်ငနး်စV်|လပု်ေဆာင်Nပီး|လပု်ေဆာင်ေနသည်", + "profile": "ကိုယ်ေရးအကျV်း | အပ်ဒိတ် NပီးသွားပါNပီ။", + "provider": "ပံ့ပိုးသူ | ပံ့ပိုးေပးသူများ", + "rate": "Jှ+နး်ထား |Jှ+နး်ထားများ", + "rateCost": "Installment Cost for Monthly access to the system", + "reading": "ဖတ်i6မ6 | ဖတ်i6မ6များ", + "receipt": "ေြပစာ | ေြပစာများ", + "receive": "လက်ခံ", + "receiver": "လက်ခံသူ", + "redirect": "ြပနn် နXး် |ြပနn် နXး်ချက်", + "refresh": "ြပနလ်ည်စတင်ပါ။", + "register": "မှတ်ပံုတင် | မှတ်ပံုတင်ထားသည်။", + "reject": "ြငင်းပယ် | ြငင်းပယ်ခဲ့သည်။", + "relocate": "ေနရာေြပာင်းပါ။", + "report": "အစီရင်ခံစာ | အစီရင်ခံစာများ", + "revenue": " ဝင်ေငွ | ဝင်ေငမွ ျား", + "risk": "အJရf ာယ်", + "sale": " အေရာင်း", + "save": "သိမ်းဆည်းပါ။", + "search": "Gှာရန'", + "select": "ေရွးချယ်ပါ", + "sell": "ေရာင်း | ေရာင်းချခဲ့", + "send": "ပUိပါ", + "sender": "ေပးပUိသူ", + "serialNumber": "အမှတ်စV် နပံ ါတ်", + "service": "ဝနေ်ဆာင်မ6", + "shs": "Solar Home System | Solar Home Systems", + "sms": "Sms စာတိ'ု", + "solar_home_system": "Solar Home System", + "speed": "Speed", + "start": "စတင်ပါ။", + "status": "အဆင်အ့တနး်", + "street": "လမ်း", + "sub": "ခဲွ", + "subject": "ဘာသာရပ်", + "successful": "ေအာင်ြမင်တယ်။", + "surname": "မျ+ိးiုိးအမည်", + "system": "စနစ်", + "tag": "တက်ဂ်", + "target": "ပစ်မှတ် | ပစ်မှတ်များ", + "tariff": "အခအခွန်|အခအခွနမ်ျား", + "ticket": "လက်မှတ် | လက်မှတ်များ", + "time": "အချနိ '", + "title": " ေခါင်းစဥ်", + "to": "သUိ", + "token": "တိကုင်", + "total": "စုစုေပါင်း", + "transaction": "ေငေွပးေငယွ ူ|ေငေွပးေငယွ ူများ", + "trend": "လမ်းေPကာင်း | လမ်းေPကာင်းသစ်", + "type": "အမျ+ိးအစား | အမျ+ိးအစားများ", + "unauthorized": "Unauthorized", + "unlock": "Unlock", + "update": "မွမ်းမံ | မွမ်းမံထားသည်။", + "user": "အသံုးြပ+သူ | အသံုးြပ+သူများ", + "value": "တနဖ် ိုး", + "village": "ရွာ", + "week": "ရက်သတf ပတ် | အပတ်စV်", + "yes": "ဟတု ်/မှန", + "yesterday": "မေနက့ " + } } diff --git a/Website/ui/src/assets/locales/en.json b/Website/ui/src/assets/locales/en.json index 364e0cf89..ebd604ab6 100644 --- a/Website/ui/src/assets/locales/en.json +++ b/Website/ui/src/assets/locales/en.json @@ -1,562 +1,562 @@ { - "menu": { - "Agents": "Agents", - "Angaza SHS": "Angaza SHS", - "Appliances": "Appliances", - "Asset Types": "Asset Types", - "Bulk Registration": "Bulk Registration", - "Calin Meter": "Calin Meter", - "CalinSmart Meter": "CalinSmart Meter", - "Clusters": "Clusters", - "Connection": "Connection", - "Connection Types": "Connection Types", - "Customers": "Customers", - "Daly Bms": "Daly BMS", - "Dashboard": "Dashboard", - "E-Bikes": "E-Bikes", - "GomeLong Meter": "GomeLong Meter", - "Kelin Meter": "Kelin Meter", - "Locations": "Locations", - "Maintenance": "Maintenance", - "Messages": "Messages", - "Meters": "Meters", - "MicroStar Meter": "MicroStar Meter", - "Mini-Grid": "Mini-Grid", - "Mini-Grids": "Mini-Grids", - "Reports": "Reports", - "Sms": "SMS", - "Solar Home Systems": "Solar Home Systems", - "Spark Meter": "Spark Meter", - "Steamaco Meter": "Steamaco Meter", - "Stron Meter": "Stron Meter", - "SunKing SHS": "SunKing SHS", - "Swifta": "Swifta", - "Targets": "Targets", - "Tariffs": "Tariffs", - "Tickets": "Tickets", - "Transactions": "Transactions", - "Viber Messaging": "Viber Messaging", - "WaveMoney": "Wave Money", - "Wavecom Payment Provider": "Wavecom Payment Provider", - "subMenu": { - "Agents": "Agents", - "Categories": "Categories", - "Clusters": "Clusters", - "Commission Types": "Commission Types", - "Config": "Config", - "Customers": "Customers", - "Groups": "Groups", - "List": "List", - "Message List": "Message List", - "Meter Models": "Meter Models", - "Meters": "Meters", - "Mini-Grid": "Mini-Grid", - "New Message": "New Message", - "New Sms": "New SMS", - "Overview": "Overview", - "Sales Accounts": "Sales Accounts", - "Settings": "Settings", - "Sites": "Sites", - "Sms List": "SMS List", - "Tariffs": "Tariffs", - "Types": "Types", - "Users": "Users", - "addCluster": "Add Cluster", - "addMiniGrid": "Add MiniGrid", - "addVillage": "Add Village" - } - }, - "messages": { - "paymentAmountCannotBeLess": "Payment amount cannot be less than {amount}", - "successfullyCreated": "{item} Successfully Created", - "successfullyUpdated": "{item} Successfully Updated" - }, - "phrases": { - "3daysAgo": "3 Days Ago", - "Appliance Payment": "Appliance Payment", - "Appliance Payment Reminder": "Appliance Payment Reminder", - "Balance Feedback": "Balance Feedback", - "Last Transaction Information Not Found": "Last Transaction Information Not Found", - "Low Balance Limit Notify": "Low Balance Limit Notify", - "Meter Charge": "Meter Charge", - "Meter Reset Failed Feedback": "Meter Reset Failed Feedback", - "Meter Reset Feedback": "Meter Reset Feedback", - "Overdue Appliance Payment Reminder": "Overdue Appliance Payment Reminder", - "Pricing Details": "Pricing Details", - "Resend Last Transaction Information": "Resend Last Transaction Information", - "Sms Footer": "SMS Footer", - "Sms Header": "SMS Header", - "Tariff Fixed Cost": "Tariff Fixed Cost", - "TicketingSystemTag": "Ticketing System Tag", - "accessRate": "Access Rate", - "accessRateDebt": "AccessRate Debt", - "accessRatePeriodInDays": "Access Rate Period in Days", - "accessRatePrice": "Access Rate Price", - "addAdditionalCostComponent": " Add Additional Cost Component", - "addAdditionalSmsAndroidSetting": "Add Additional SMS Android Setting", - "addBalance": "Add Balance | Balance added successfully", - "addCommissionType": "Add Commission Type | Agent commission added successfully", - "addCustomer": "Add Customer", - "addNewType": "Add New Type", - "addReceipt": "Add Receipt | Receipt Added successfully | This agent does not owe the energy provider. ", - "addReceiptNotify": "Suggested receipt amount is {energySupplier} | Max receipt amount must be equal to {dueToEnergySupplier}", - "addTou": "Add TOU (Time of Usage)", - "agentCommissionDeleted": "Agent Commission Deleted!", - "agentCommissionUpdated": "Agent Commission Updated!", - "agentTicket": "Agent Ticket | Agent Tickets", - "agentTransaction": "Agent Transaction | Agent Transactions", - "allNetworkProviders": "All Network Providers", - "allTariffs": "All Tariffs", - "allTransactions": "All Transactions", - "anyCategory": "Any Category", - "anyUser": "Any User", - "apiKey": "API Key", - "apiToken": "API Token", - "appliance": "Appliance | Appliances", - "applianceCommission": "Appliance Commission (sample 0.1)", - "applianceType": "Appliance Type | Appliance Types | Add Appliance Type", - "assignAppliance": "Assign Appliance | Assigned Appliances | Appliance Assigned successfully", - "assignClusterManager": "Assign Cluster Manager", - "assignFor": "Assign For | Assigned For", - "assignTo": "Assign To | Assigned To", - "authenticationToken": "Authentication Token", - "averagePeriod": "Average Period", - "avgRevenue": "Avg Revenue", - "avgRevenuePerConnection": "Avg Revenue Per Connection", - "balanceHistories": "Balance Histories", - "batteryChargeStatus": "Battery Charge Status", - "batteryLevel": "Battery Level", - "batteryPvCharts": "Battery & PV Charts", - "batteryVoltage": "Battery Voltage", - "bulkSms": "Bulk SMS | Are you sure to send the bulk SMS? | The SMS(es) are send out", - "businessNumber": "Business Number", - "changePassword": "Change Password", - "closedTicket": "Closed Ticket", - "clusterMap": "Cluster Map", - "clustersDashboard": "Clusters Dashboard", - "commissionType": " Commission Type | Commission Types", - "comparedPeriod": "Compared Period", - "componentPrice": "Component Price", - "confirmPassword": "Confirm Password", - "connectedMeters": "Connected Meters", - "connectedPower": "Connected Power", - "connectionGroup": "Connection Group | Connection Groups", - "connectionType": "Connection Type | Connection Types", - "connectionTypeDetails": "Connection Type Details", - "conversationId": "Conversation Id", - "createFirsRecord": "Create Your First Record | Create the First {data} Record", - "createdAt": "Created At", - "createdDate": "Created Date", - "customerList": "Customer List", - "dataLogger": "Data-Logger | Data Logger is activated. | Data Logger is deactivated.", - "deferredDebt": "Deferred Debt", - "deferredPayment": "Deferred Payment", - "deleteAgent": "Delete Agent | Agent Deleted Successfully | Agent Updated Successfully | I confirm that {name} will be deleted", - "deleteAgentCommission": "Delete Agent Commission | I confirm that {commissionName} will be deleted ", - "deleteAppliance": "Delete Appliance", - "deleteAssetType": "Delete Asset Type | Asset Type Deleted Successfully | Are you sure to delete the asset type ? | Asset Type Updated Successfully", - "deleteCustomer": "Delete Customer | Customer Deleted Successfully", - "deleteCustomerNotify": "I confirm that {name} {surname} will be deleted", - "deleteMeter": "Delete Meter | I confirm to delete {serialNumber}", - "deleteMeterNotify": "You have to confirm to delete the meter | Meter Deleted successfully", - "distributeThis": "Please distribute this to your customers and ask them to send their meter number to register our Viber communication system.", - "downPayment": "Down Payment", - "dueDate": "Due Date", - "editConnectionGroup": "Edit Connection Group | Are you sure to changing this connection group name ? | Connection Group Updated Successfully", - "editConnectionType": "Edit Connection Type", - "editConnectionTypeNotify": "Connection Type Name Updated Successfully | Are you sure to change of connection type name for {name} ?", - "editRate": "Edit Rate", - "editSubConnectionType": "Edit Sub Connection Type", - "editSubConnectionTypeNotify": "Are you sure to changing this sub connection type? | Sub Connection Updated Successfully!", - "enableAccessRate": "Enable Access Rate", - "enableMinimumPurchaseAmount": "Enable Minimum Purchase Amount", - "energyCommission": "Energy Commission (sample 0.1)", - "expireSession": "Session is about to expire", - "expireSessionLabel": "If you want to extend your session for the next 60(sixty) minutes, please confirm this window. | Your session expires in {expires_in} seconds.", - "financeOverview": "Finance Overview (Period:{period})", - "flatLoadLimit": "Flat Load Limit", - "flatPrice": "Flat Price", - "forgotPassword": "Forgot Password | Please insert your email address that you use in system.", - "fromDate": "From Date", - "getUpdatesFrom": "Get Update From {x}", - "inReturn": "In Return", - "inXSeconds": "In {x} Seconds", - "incomingTransactions": "Incoming Transactions", - "isPrimary": "Is Primary", - "jobTitle": "Job Title", - "lastDataReceived": "Last Data Received", - "lastPayment": "Last Payment", - "lastReceipts": "Last Receipts", - "lastSyncDate": "Last Sync Date", - "lastTransactions": "Last Transactions", - "lastUpdate": "Last Update", - "lastXDays": "Last {x} Days", - "listOfTickets": "List of Tickets", - "livingIn": "Living In", - "loadingChartData": "Loading Chart Data", - "loadingData": "Loading Data", - "loanRate": "Loan Rate", - "logOut": "Log Out", - "loginNotify": "The easiest way to manage your Mini-Grid | Authentication failed. Check your credentials", - "manufacturerName": "Manufacturer Name", - "mapProvider": "Map Provider", - "maxCurrent": "Max Current", - "merchantId": "Merchant ID", - "messageNotify": "Message should contain more than 3 letters", - "messageText": "Message Text", - "meterDetail": "Meter Detail | Meter Details", - "meterDetailNotify": "Unexpected error | Please get in touch with your system admin. | New Owner is required!", - "meterDetailNotify2": "Please select a new owner. | Re-Assigning Meter? | Are you sure to assign the meter from {name} to {newName} ?", - "meterReadings": "Meter Readings", - "meterTransaction": "Meter Transaction | Meter Transactions", - "meterTypes": "Meter Types", - "miniGridMap": "MiniGrid Map", - "minimumPayableAmount": "Minimum Payable Amount (access to the system for 7 days) | Minimum Payable Amount (access to the system for 30 days)", - "minimumPurchaseAmount": "Minimum Purchase Amount", - "minimumPurchaseAmountDescription": "This field represents minimum price of the purchase the customer can do. You can leave it as zero If you do not want to apply this feature", - "missingField": "Missing Field", - "mobileProvider": "Mobile Provider", - "modelName": "Model Name", - "monthlyAvg": "Monthly Avg.", - "monthlyReports": "Monthly Reports", - "mpesaReceipt": "Mpesa Receipt", - "mustBeNegative": "Must be Negative", - "namingCluster": "Naming Cluster", - "newAddress": "New Address", - "newAgent": "New Agent | Agent Added Successfully", - "newAppliance": "New Appliance | Appliance Registered Successfully", - "newAssetType": "New Asset Type | Asset Type Registered Successfully", - "newCategory": "New Category | New category added successfully.", - "newCluster": "New Cluster | There is no result for {clusterName}. Please use Draw a polygon tool for draw your cluster area.", - "newClusterNotify": "You did not enter a name to the cluster. Please assign a name to the cluster. | Cluster Location not selected | Please select/draw a location for the cluster", - "newClusterNotify2": "Cluster Manager not selected | Please select a cluster manager. | The Cluster you add is stored successfully.", - "newComment": "New Comment", - "newConnection": "New Connection | New Connections", - "newConnectionGroup": "New Connection Group | Connection Group has registered.", - "newConnectionType": "New Connection Type | Connection Type has registered.", - "newConnectionsTarget": "New Connections / Target", - "newEBike": "New E-Bike | New E-Bike created successfully", - "newMaintenanceRequest": "New Maintenance Request | The Task created successfully. The Person will also be notified by SMS", - "newMaintenanceUser": "New Maintenance Service Provider | Maintenance Person Created", - "newMeterType": "New Meter Type | Meter Type Added Successful", - "newMiniGrid": "New Mini Grid | The Mini-Grid you add is stored successfully.", - "newOwner": "New Owner", - "newShs": "New Solar Home System | New Solar Home created successfully", - "newSms": "New SMS", - "newSubConnectionType": "New Sub Connection Type | SubConnectionType has registered.", - "newTarget": "New Target | Select destination for target ", - "newTargetNotify": "Please fill all required field | Target stored successfully", - "newTariff": "New Tariff | New tariff registered successfully.", - "newTariffLabels": "kWh Price | In order to use this field, the meters that will use the tariff must be suitable for time of usages.", - "newTicket": "New Ticket", - "newTicketingUser": "New Ticketing User", - "newUser": "New User | New user created.", - "newVillage": "New Village", - "newVillageNotify": "The Village you add is stored successfully.", - "noData": "No Data | No Data Found", - "noDataFoundFor": "No Data Found For {data}", - "noOne": "No One", - "onlyApproved": "Only Approved", - "onlyRejected": "Only Rejected", - "openTicket": "Open Ticket", - "orderId": "Order ID", - "originatorConversationId": "Originator Conversation Id", - "outgoingSms": "Outgoing SMS", - "overDueReminderRate": "Over Due Reminder Rate (Day)", - "paginateLabels": "Showing {from} to {to} of {total} entries", - "paidFor": "Paid For", - "passwordProtected": "Password Protected Zone | Please enter the password to access this area", - "paymentDistribution": "Payment Distribution", - "paymentFlow": "Payment Flow | Monthly Avg. {currency} over {count} Months", - "paymentOverview": "Payment Overview {period}", - "paymentRequests": "Payment Requests", - "paymentService": "Payment Service", - "paymentType": "Payment Type", - "perPage": "Per Page", - "personalInformation": "Personal Information", - "pleaseShareThis": "Please share this link with your customers for making their online payments.", - "preparingChartData": "Preparing Chart Data", - "processTime": "Process Time", - "processedTransactions": "Processed Transactions", - "providerSpecificInformation": "Provider Specific Information", - "purchaseCode": "Purchase Code", - "rateType": "Rate Type", - "ratesCount": "Installment count | Asset Rate updated successfully.", - "redirectLabel": "You have to add {imperativeItem} for using this place.", - "referenceId": "Reference ID", - "refreshData": "Refresh Data", - "registeredClusters": "Registered Clusters", - "registeredCustomers": "Registered Customers", - "relocateMeter": "Relocate Meter | Are you sure you want to relocate the selected meters? | Meter is relocated successfully", - "remainingAmount": "RemainingAmount", - "reminderRate": "Reminder Rate (Day)", - "responsibleFor": "Responsible For (Mini-Grid)", - "revenueAnalysis": "Revenue Analysis", - "revenueColumns": "Revenue Columns", - "revenueLine": "Revenue Line", - "revenuePerCustomerType": "Revenue Per Customer Type | No data for selected period", - "revenuePercentiles": "Revenue Percentiles", - "revenueTargetsPerCustomerType": "Revenue Targets Per Customer Type | Targeted Revenue", - "revenueTrends": "Revenue Trends", - "riskBalance": "Risk Balance", - "sameDayLastWeek": "Same day last week", - "searchResultFor": "Search Result for", - "secretKey": "Secret Key", - "selectColor": "Select Color", - "selectDevice": "Select a Device to bind with this appliance", - "selectMiniGrid": "Select Mini-Grid | MiniGrid Data-logger is active", - "selectPeriod": "Select a period for data", - "sellAsset": "Sell Asset | New asset sold successfully. | Are you sure to sell the asset for {cost} ? ", - "sentDate": "Sent Date", - "serialNumber": "Serial Number", - "setPoints": "Set Points", - "signIn": "Sign In", - "smsHistory": "SMS History", - "smsList": "SMS List", - "smsListNotify": "Message should contain more than 3 letters | The SMS is send out", - "socialTariff": "Social Tariff | Price per kWh | Initial energy budget", - "socialTariffLabels": "Daily allowance at social tariff | Maximum stacked energy", - "socialTariffOptions": "Show Social Tariff Options | Hide Social Tariff Options ", - "soldAppliances": "Sold Appliances", - "soldAssets": "Sold Assets", - "soldDate": "Sold Date", - "soldEnergy": "Sold energy (based on transactions)", - "somethingWentWrong": "Something went wrong", - "sparkMeterNotify": "MeterModels must be synchronized to synchronize Customers . | Tariffs must be synchronized to synchronize Customers .", - "statusNow": "Status Now", - "stepperLabels": "Free limit of MiniGrid Data-logger is exceeded. Your activated Mini-grid list listed below. | You can prefer deactivate one of them, or you can order more slots below.", - "stepperLabels2": "Please complete the transaction by entering the code provided in the purchase. | You have purchased one more slot to logging mini-grid data", - "stepperLabels3": "You have purchased five more slot to add new maintainers to system.| We were not able to process your Payment. Please contact the administrator.", - "stepperLabels4": "Free limit of Maintenance Users is exceeded..| You can order more slots below.", - "subConnectionTypes": "Sub Connection Types", - "subTargets": "Sub Targets", - "subTypes": "Sub Types", - "successfullyUpdated": "Successfully Updated", - "swiftaTransaction": "SwiftaTransaction", - "targetsForConnectionTypes": "Targets for Connection Types", - "tariffDetail": "Tariff Detail | Are you sure update this tariff?", - "tariffNotify": "Tariff deleted successfully. | Tariff changed on using meters successfully. | This tariff has using by {usageCount} of meters. Are you sure update this tariff?", - "tariffNotify2": "Are you sure delete this tariff? | This tariff has using by {usageCount} of meters.You have to decide change meters tariffs. Are you sure delete this tariff?", - "thirdPartyTransaction": "Third Party Transaction", - "thisKeyWillUseIn": "Resend Last Transaction Information Key is for the customers that want to get their last transaction information. When the customers want to get their last transaction information, they need to send an SMS that starts with this key and go on with the customer meter serial number.", - "thisPeriod": "This Period", - "ticketCategories": "Ticket Categories", - "ticketDetails": "Ticket Details", - "ticketLabels": "That tickets will be payed out to a third party person (non Employee) | By any question please get in touch with {email}", - "ticketNotify": "Ticket closed successfully. | Comment send successfully.", - "ticketUserNotify": "User added successfully. | {tag} not found in the Ticketing system!", - "ticketingSystemTag": "Ticketing System Tag", - "ticketsOverview": "Tickets Overview | Opened Tickets are on the left side and resolved tickets on the right side", - "toDate": "To Date", - "totalCost": "Total Cost", - "totalRevenue": "Total Revenue", - "transactionCancelled": "Transaction cancelled", - "transactionId": "Transaction ID", - "transactionIdentifier": "Transaction Identifier", - "transactionNotify": "There is not enough data to compare", - "transactionProcessing": "Transaction Processing", - "transactionReference": "Transaction Reference", - "untraceableTransaction": "Untraceable transaction", - "updateAddress": "Update Address", - "userForOutsourcing": "User for Outsourcing", - "userId": "User ID", - "userList": "User List", - "userManagement": "User Management", - "userTicket": "User Ticket | User Tickets", - "validUntil": "Valid Until", - "waveComTransaction": "WaveCom Transaction", - "waveMoneyTransaction": "Wave Money Transaction", - "weeklyReports": "Weekly Reports", - "wholeVillage": "Whole Village", - "writeMessage": "Write a message...", - "wrongPassword": "Wrong password", - "yourAuthTokenForSwifta": "Your auth token for Swifta Payments, please share this with Swifta to use this token in their API requests.", - "yourMessage": "Your message will seen like that" - }, - "words": { - "access": "Access", - "activate": "Activate | Activated", - "add": "Add | Added", - "address": "Address | Addresses", - "agent": "Agent | Agents", - "all": "All", - "amount": "Amount", - "analysis": "Analysis", - "annually": "Annually", - "appliance": "Appliance | Appliances", - "apply": "Apply", - "asset": "Asset", - "assign": "Assign | Assigned", - "attention": "Attention", - "authorize": "Authorize | Authorized", - "authorized": "Authorized", - "balance": "Balance", - "base": "Base", - "basic": "Basic", - "battery": "Battery | Batteries", - "birthday": "Birthday", - "body": "Body", - "callback": "Callback", - "cancel": "Cancel | Cancelled", - "category": "Category | Categories", - "city": "City | Cities", - "close": "Close | Closed", - "cluster": "Cluster | Clusters", - "collapse": "Collapse", - "color": "Color", - "column": "Column | Columns", - "comment": "Comment | Comments", - "commission": "Commission", - "compared": "Compared", - "confirm": "Confirm | Confirmed", - "connect": "Connect | Connected", - "connection": "Connection | Connections", - "connectivity": "Connectivity", - "consumption": "Consumption", - "continue": "Continue", - "conversation": "Conversation", - "cost": "Cost", - "create": "Create | Created", - "credit": "Credit", - "currency": "Currency", - "customer": "Customer | Customers", - "date": "Date", - "day": "Day | Daily", - "deactivate": "Deactivate | Deactivated", - "delete": "Delete", - "description": "Description", - "detail": "Detail | Details", - "device": "Device", - "deviceType": "Device Type", - "devices": "Devices", - "disable": "Disable", - "dismiss": "Dismiss", - "done": "Done", - "download": "Download", - "e_bike": "E-Bike | E-Bikes", - "edit": "Edit", - "education": "Education", - "email": "Email", - "employee": "Employee", - "enable": "Enable", - "encryption": "Encryption", - "end": "End", - "energy": "Energy | Energies", - "expand": "Expand", - "female": "Female", - "file": "File", - "filter": "Filter", - "finance": "Finance", - "for": "For", - "gender": "Gender", - "generate": "Generate | Generated", - "group": "Group | Groups", - "history": "History | Histories", - "host": "Host", - "id": "ID", - "incoming": "Incoming", - "key": "Key", - "last": "Last", - "latitude": "Latitude", - "line": "Line", - "list": "List", - "location": "Location | Locations", - "lock": "Lock", - "login": "Login", - "longitude": "Longitude", - "maintenance": "Maintenance", - "male": "Male", - "manufacturer": "Manufacturer | Manufacturers", - "map": "Map", - "message": "Message | Messages", - "meter": "Meter | Meters", - "mileage": "Mileage", - "miniGrid": "Mini-Grid", - "mobile": "Mobile", - "month": "Month | Monthly", - "name": "Name", - "network": "Network", - "new": "New", - "next": "Next", - "no": "No", - "notice": "Notice", - "offline": "Offline", - "online": "Online", - "open": "Open | Opened", - "outgoing": "Outgoing", - "outsourcing": "Outsourcing", - "overview": "Overview", - "owner": "Owner", - "paidFor": "Paid for", - "password": "Password", - "payment": "Payment", - "people": "People", - "percentile": "Percentile | Percentiles", - "period": "Period", - "phase": "Phase", - "phone": "Phone", - "port": "Port", - "previous": "Previous", - "price": "Price", - "primary": "Primary", - "process": "Process | Processed | Processing", - "profile": "Profile | The update has been done.", - "provider": "Provider | Providers", - "rate": "Rate | Rates", - "rateCost": "Installment Cost for {rateType} access to the system", - "reading": "Reading | Readings", - "receipt": "Receipt | Receipts", - "receive": "receive", - "receiver": "Receiver", - "redirect": "Redirect | Redirection", - "refresh": "Refresh", - "register": "Register | Registered", - "reject": "Reject | Rejected", - "relocate": "Relocate", - "report": "Report | Reports", - "revenue": "Revenue | Revenues", - "risk": "Risk", - "sale": "Sale ", - "save": "Save", - "search": "Search", - "select": "Select", - "sell": "Sell | Sold", - "send": "Send", - "sender": "Sender", - "serialNumber": "Serial Number", - "service": "Service", - "shs": "Solar Home System | Solar Home Systems", - "sms": "SMS", - "solar_home_system": "Solar Home System", - "speed": "Speed", - "start": "Start", - "status": "Status", - "street": "Street", - "sub": "Sub", - "subject": "Subject", - "successful": "Successful", - "surname": "Surname", - "system": "System", - "tag": "Tag", - "target": "Target | Targets", - "tariff": "Tariff | Tariffs", - "ticket": "Ticket | Tickets", - "time": "Time", - "title": "Title", - "to": "To", - "token": "Token", - "total": "Total", - "transaction": "Transaction | Transactions", - "trend": "Trend | Trends", - "type": "Type | Types", - "unauthorized": "Unauthorized", - "unlock": "Unlock", - "update": "Update | Updated", - "user": "User | Users", - "value": "Value", - "village": "Village", - "week": "Week | Weekly", - "yes": "Yes", - "yesterday": "Yesterday" + "menu": { + "Agents": "Agents", + "Angaza SHS": "Angaza SHS", + "Appliances": "Appliances", + "Asset Types": "Asset Types", + "Bulk Registration": "Bulk Registration", + "Calin Meter": "Calin Meter", + "CalinSmart Meter": "CalinSmart Meter", + "Clusters": "Clusters", + "Connection": "Connection", + "Connection Types": "Connection Types", + "Customers": "Customers", + "Daly Bms": "Daly BMS", + "Dashboard": "Dashboard", + "E-Bikes": "E-Bikes", + "GomeLong Meter": "GomeLong Meter", + "Kelin Meter": "Kelin Meter", + "Locations": "Locations", + "Maintenance": "Maintenance", + "Messages": "Messages", + "Meters": "Meters", + "MicroStar Meter": "MicroStar Meter", + "Mini-Grid": "Mini-Grid", + "Mini-Grids": "Mini-Grids", + "Reports": "Reports", + "Sms": "SMS", + "Solar Home Systems": "Solar Home Systems", + "Spark Meter": "Spark Meter", + "Steamaco Meter": "Steamaco Meter", + "Stron Meter": "Stron Meter", + "SunKing SHS": "SunKing SHS", + "Swifta": "Swifta", + "Targets": "Targets", + "Tariffs": "Tariffs", + "Tickets": "Tickets", + "Transactions": "Transactions", + "Viber Messaging": "Viber Messaging", + "WaveMoney": "Wave Money", + "Wavecom Payment Provider": "Wavecom Payment Provider", + "subMenu": { + "Agents": "Agents", + "Categories": "Categories", + "Clusters": "Clusters", + "Commission Types": "Commission Types", + "Config": "Config", + "Customers": "Customers", + "Groups": "Groups", + "List": "List", + "Message List": "Message List", + "Meter Models": "Meter Models", + "Meters": "Meters", + "Mini-Grid": "Mini-Grid", + "New Message": "New Message", + "New Sms": "New SMS", + "Overview": "Overview", + "Sales Accounts": "Sales Accounts", + "Settings": "Settings", + "Sites": "Sites", + "Sms List": "SMS List", + "Tariffs": "Tariffs", + "Types": "Types", + "Users": "Users", + "addCluster": "Add Cluster", + "addMiniGrid": "Add MiniGrid", + "addVillage": "Add Village" } + }, + "messages": { + "paymentAmountCannotBeLess": "Payment amount cannot be less than {amount}", + "successfullyCreated": "{item} Successfully Created", + "successfullyUpdated": "{item} Successfully Updated" + }, + "phrases": { + "3daysAgo": "3 Days Ago", + "Appliance Payment": "Appliance Payment", + "Appliance Payment Reminder": "Appliance Payment Reminder", + "Balance Feedback": "Balance Feedback", + "Last Transaction Information Not Found": "Last Transaction Information Not Found", + "Low Balance Limit Notify": "Low Balance Limit Notify", + "Meter Charge": "Meter Charge", + "Meter Reset Failed Feedback": "Meter Reset Failed Feedback", + "Meter Reset Feedback": "Meter Reset Feedback", + "Overdue Appliance Payment Reminder": "Overdue Appliance Payment Reminder", + "Pricing Details": "Pricing Details", + "Resend Last Transaction Information": "Resend Last Transaction Information", + "Sms Footer": "SMS Footer", + "Sms Header": "SMS Header", + "Tariff Fixed Cost": "Tariff Fixed Cost", + "TicketingSystemTag": "Ticketing System Tag", + "accessRate": "Access Rate", + "accessRateDebt": "AccessRate Debt", + "accessRatePeriodInDays": "Access Rate Period in Days", + "accessRatePrice": "Access Rate Price", + "addAdditionalCostComponent": " Add Additional Cost Component", + "addAdditionalSmsAndroidSetting": "Add Additional SMS Android Setting", + "addBalance": "Add Balance | Balance added successfully", + "addCommissionType": "Add Commission Type | Agent commission added successfully", + "addCustomer": "Add Customer", + "addNewType": "Add New Type", + "addReceipt": "Add Receipt | Receipt Added successfully | This agent does not owe the energy provider. ", + "addReceiptNotify": "Suggested receipt amount is {energySupplier} | Max receipt amount must be equal to {dueToEnergySupplier}", + "addTou": "Add TOU (Time of Usage)", + "agentCommissionDeleted": "Agent Commission Deleted!", + "agentCommissionUpdated": "Agent Commission Updated!", + "agentTicket": "Agent Ticket | Agent Tickets", + "agentTransaction": "Agent Transaction | Agent Transactions", + "allNetworkProviders": "All Network Providers", + "allTariffs": "All Tariffs", + "allTransactions": "All Transactions", + "anyCategory": "Any Category", + "anyUser": "Any User", + "apiKey": "API Key", + "apiToken": "API Token", + "appliance": "Appliance | Appliances", + "applianceCommission": "Appliance Commission (sample 0.1)", + "applianceType": "Appliance Type | Appliance Types | Add Appliance Type", + "assignAppliance": "Assign Appliance | Assigned Appliances | Appliance Assigned successfully", + "assignClusterManager": "Assign Cluster Manager", + "assignFor": "Assign For | Assigned For", + "assignTo": "Assign To | Assigned To", + "authenticationToken": "Authentication Token", + "averagePeriod": "Average Period", + "avgRevenue": "Avg Revenue", + "avgRevenuePerConnection": "Avg Revenue Per Connection", + "balanceHistories": "Balance Histories", + "batteryChargeStatus": "Battery Charge Status", + "batteryLevel": "Battery Level", + "batteryPvCharts": "Battery & PV Charts", + "batteryVoltage": "Battery Voltage", + "bulkSms": "Bulk SMS | Are you sure to send the bulk SMS? | The SMS(es) are send out", + "businessNumber": "Business Number", + "changePassword": "Change Password", + "closedTicket": "Closed Ticket", + "clusterMap": "Cluster Map", + "clustersDashboard": "Clusters Dashboard", + "commissionType": " Commission Type | Commission Types", + "comparedPeriod": "Compared Period", + "componentPrice": "Component Price", + "confirmPassword": "Confirm Password", + "connectedMeters": "Connected Meters", + "connectedPower": "Connected Power", + "connectionGroup": "Connection Group | Connection Groups", + "connectionType": "Connection Type | Connection Types", + "connectionTypeDetails": "Connection Type Details", + "conversationId": "Conversation Id", + "createFirsRecord": "Create Your First Record | Create the First {data} Record", + "createdAt": "Created At", + "createdDate": "Created Date", + "customerList": "Customer List", + "dataLogger": "Data-Logger | Data Logger is activated. | Data Logger is deactivated.", + "deferredDebt": "Deferred Debt", + "deferredPayment": "Deferred Payment", + "deleteAgent": "Delete Agent | Agent Deleted Successfully | Agent Updated Successfully | I confirm that {name} will be deleted", + "deleteAgentCommission": "Delete Agent Commission | I confirm that {commissionName} will be deleted ", + "deleteAppliance": "Delete Appliance", + "deleteAssetType": "Delete Asset Type | Asset Type Deleted Successfully | Are you sure to delete the asset type ? | Asset Type Updated Successfully", + "deleteCustomer": "Delete Customer | Customer Deleted Successfully", + "deleteCustomerNotify": "I confirm that {name} {surname} will be deleted", + "deleteMeter": "Delete Meter | I confirm to delete {serialNumber}", + "deleteMeterNotify": "You have to confirm to delete the meter | Meter Deleted successfully", + "distributeThis": "Please distribute this to your customers and ask them to send their meter number to register our Viber communication system.", + "downPayment": "Down Payment", + "dueDate": "Due Date", + "editConnectionGroup": "Edit Connection Group | Are you sure to changing this connection group name ? | Connection Group Updated Successfully", + "editConnectionType": "Edit Connection Type", + "editConnectionTypeNotify": "Connection Type Name Updated Successfully | Are you sure to change of connection type name for {name} ?", + "editRate": "Edit Rate", + "editSubConnectionType": "Edit Sub Connection Type", + "editSubConnectionTypeNotify": "Are you sure to changing this sub connection type? | Sub Connection Updated Successfully!", + "enableAccessRate": "Enable Access Rate", + "enableMinimumPurchaseAmount": "Enable Minimum Purchase Amount", + "energyCommission": "Energy Commission (sample 0.1)", + "expireSession": "Session is about to expire", + "expireSessionLabel": "If you want to extend your session for the next 60(sixty) minutes, please confirm this window. | Your session expires in {expires_in} seconds.", + "financeOverview": "Finance Overview (Period:{period})", + "flatLoadLimit": "Flat Load Limit", + "flatPrice": "Flat Price", + "forgotPassword": "Forgot Password | Please insert your email address that you use in system.", + "fromDate": "From Date", + "getUpdatesFrom": "Get Update From {x}", + "inReturn": "In Return", + "inXSeconds": "In {x} Seconds", + "incomingTransactions": "Incoming Transactions", + "isPrimary": "Is Primary", + "jobTitle": "Job Title", + "lastDataReceived": "Last Data Received", + "lastPayment": "Last Payment", + "lastReceipts": "Last Receipts", + "lastSyncDate": "Last Sync Date", + "lastTransactions": "Last Transactions", + "lastUpdate": "Last Update", + "lastXDays": "Last {x} Days", + "listOfTickets": "List of Tickets", + "livingIn": "Living In", + "loadingChartData": "Loading Chart Data", + "loadingData": "Loading Data", + "loanRate": "Loan Rate", + "logOut": "Log Out", + "loginNotify": "The easiest way to manage your Mini-Grid | Authentication failed. Check your credentials", + "manufacturerName": "Manufacturer Name", + "mapProvider": "Map Provider", + "maxCurrent": "Max Current", + "merchantId": "Merchant ID", + "messageNotify": "Message should contain more than 3 letters", + "messageText": "Message Text", + "meterDetail": "Meter Detail | Meter Details", + "meterDetailNotify": "Unexpected error | Please get in touch with your system admin. | New Owner is required!", + "meterDetailNotify2": "Please select a new owner. | Re-Assigning Meter? | Are you sure to assign the meter from {name} to {newName} ?", + "meterReadings": "Meter Readings", + "meterTransaction": "Meter Transaction | Meter Transactions", + "meterTypes": "Meter Types", + "miniGridMap": "MiniGrid Map", + "minimumPayableAmount": "Minimum Payable Amount (access to the system for 7 days) | Minimum Payable Amount (access to the system for 30 days)", + "minimumPurchaseAmount": "Minimum Purchase Amount", + "minimumPurchaseAmountDescription": "This field represents minimum price of the purchase the customer can do. You can leave it as zero If you do not want to apply this feature", + "missingField": "Missing Field", + "mobileProvider": "Mobile Provider", + "modelName": "Model Name", + "monthlyAvg": "Monthly Avg.", + "monthlyReports": "Monthly Reports", + "mpesaReceipt": "Mpesa Receipt", + "mustBeNegative": "Must be Negative", + "namingCluster": "Naming Cluster", + "newAddress": "New Address", + "newAgent": "New Agent | Agent Added Successfully", + "newAppliance": "New Appliance | Appliance Registered Successfully", + "newAssetType": "New Asset Type | Asset Type Registered Successfully", + "newCategory": "New Category | New category added successfully.", + "newCluster": "New Cluster | There is no result for {clusterName}. Please use Draw a polygon tool for draw your cluster area.", + "newClusterNotify": "You did not enter a name to the cluster. Please assign a name to the cluster. | Cluster Location not selected | Please select/draw a location for the cluster", + "newClusterNotify2": "Cluster Manager not selected | Please select a cluster manager. | The Cluster you add is stored successfully.", + "newComment": "New Comment", + "newConnection": "New Connection | New Connections", + "newConnectionGroup": "New Connection Group | Connection Group has registered.", + "newConnectionType": "New Connection Type | Connection Type has registered.", + "newConnectionsTarget": "New Connections / Target", + "newEBike": "New E-Bike | New E-Bike created successfully", + "newMaintenanceRequest": "New Maintenance Request | The Task created successfully. The Person will also be notified by SMS", + "newMaintenanceUser": "New Maintenance Service Provider | Maintenance Person Created", + "newMeterType": "New Meter Type | Meter Type Added Successful", + "newMiniGrid": "New Mini Grid | The Mini-Grid you add is stored successfully.", + "newOwner": "New Owner", + "newShs": "New Solar Home System | New Solar Home created successfully", + "newSms": "New SMS", + "newSubConnectionType": "New Sub Connection Type | SubConnectionType has registered.", + "newTarget": "New Target | Select destination for target ", + "newTargetNotify": "Please fill all required field | Target stored successfully", + "newTariff": "New Tariff | New tariff registered successfully.", + "newTariffLabels": "kWh Price | In order to use this field, the meters that will use the tariff must be suitable for time of usages.", + "newTicket": "New Ticket", + "newTicketingUser": "New Ticketing User", + "newUser": "New User | New user created.", + "newVillage": "New Village", + "newVillageNotify": "The Village you add is stored successfully.", + "noData": "No Data | No Data Found", + "noDataFoundFor": "No Data Found For {data}", + "noOne": "No One", + "onlyApproved": "Only Approved", + "onlyRejected": "Only Rejected", + "openTicket": "Open Ticket", + "orderId": "Order ID", + "originatorConversationId": "Originator Conversation Id", + "outgoingSms": "Outgoing SMS", + "overDueReminderRate": "Over Due Reminder Rate (Day)", + "paginateLabels": "Showing {from} to {to} of {total} entries", + "paidFor": "Paid For", + "passwordProtected": "Password Protected Zone | Please enter the password to access this area", + "paymentDistribution": "Payment Distribution", + "paymentFlow": "Payment Flow | Monthly Avg. {currency} over {count} Months", + "paymentOverview": "Payment Overview {period}", + "paymentRequests": "Payment Requests", + "paymentService": "Payment Service", + "paymentType": "Payment Type", + "perPage": "Per Page", + "personalInformation": "Personal Information", + "pleaseShareThis": "Please share this link with your customers for making their online payments.", + "preparingChartData": "Preparing Chart Data", + "processTime": "Process Time", + "processedTransactions": "Processed Transactions", + "providerSpecificInformation": "Provider Specific Information", + "purchaseCode": "Purchase Code", + "rateType": "Rate Type", + "ratesCount": "Installment count | Asset Rate updated successfully.", + "redirectLabel": "You have to add {imperativeItem} for using this place.", + "referenceId": "Reference ID", + "refreshData": "Refresh Data", + "registeredClusters": "Registered Clusters", + "registeredCustomers": "Registered Customers", + "relocateMeter": "Relocate Meter | Are you sure you want to relocate the selected meters? | Meter is relocated successfully", + "remainingAmount": "RemainingAmount", + "reminderRate": "Reminder Rate (Day)", + "responsibleFor": "Responsible For (Mini-Grid)", + "revenueAnalysis": "Revenue Analysis", + "revenueColumns": "Revenue Columns", + "revenueLine": "Revenue Line", + "revenuePerCustomerType": "Revenue Per Customer Type | No data for selected period", + "revenuePercentiles": "Revenue Percentiles", + "revenueTargetsPerCustomerType": "Revenue Targets Per Customer Type | Targeted Revenue", + "revenueTrends": "Revenue Trends", + "riskBalance": "Risk Balance", + "sameDayLastWeek": "Same day last week", + "searchResultFor": "Search Result for", + "secretKey": "Secret Key", + "selectColor": "Select Color", + "selectDevice": "Select a Device to bind with this appliance", + "selectMiniGrid": "Select Mini-Grid | MiniGrid Data-logger is active", + "selectPeriod": "Select a period for data", + "sellAsset": "Sell Asset | New asset sold successfully. | Are you sure to sell the asset for {cost} ? ", + "sentDate": "Sent Date", + "serialNumber": "Serial Number", + "setPoints": "Set Points", + "signIn": "Sign In", + "smsHistory": "SMS History", + "smsList": "SMS List", + "smsListNotify": "Message should contain more than 3 letters | The SMS is send out", + "socialTariff": "Social Tariff | Price per kWh | Initial energy budget", + "socialTariffLabels": "Daily allowance at social tariff | Maximum stacked energy", + "socialTariffOptions": "Show Social Tariff Options | Hide Social Tariff Options ", + "soldAppliances": "Sold Appliances", + "soldAssets": "Sold Assets", + "soldDate": "Sold Date", + "soldEnergy": "Sold energy (based on transactions)", + "somethingWentWrong": "Something went wrong", + "sparkMeterNotify": "MeterModels must be synchronized to synchronize Customers . | Tariffs must be synchronized to synchronize Customers .", + "statusNow": "Status Now", + "stepperLabels": "Free limit of MiniGrid Data-logger is exceeded. Your activated Mini-grid list listed below. | You can prefer deactivate one of them, or you can order more slots below.", + "stepperLabels2": "Please complete the transaction by entering the code provided in the purchase. | You have purchased one more slot to logging mini-grid data", + "stepperLabels3": "You have purchased five more slot to add new maintainers to system.| We were not able to process your Payment. Please contact the administrator.", + "stepperLabels4": "Free limit of Maintenance Users is exceeded..| You can order more slots below.", + "subConnectionTypes": "Sub Connection Types", + "subTargets": "Sub Targets", + "subTypes": "Sub Types", + "successfullyUpdated": "Successfully Updated", + "swiftaTransaction": "SwiftaTransaction", + "targetsForConnectionTypes": "Targets for Connection Types", + "tariffDetail": "Tariff Detail | Are you sure update this tariff?", + "tariffNotify": "Tariff deleted successfully. | Tariff changed on using meters successfully. | This tariff has using by {usageCount} of meters. Are you sure update this tariff?", + "tariffNotify2": "Are you sure delete this tariff? | This tariff has using by {usageCount} of meters.You have to decide change meters tariffs. Are you sure delete this tariff?", + "thirdPartyTransaction": "Third Party Transaction", + "thisKeyWillUseIn": "Resend Last Transaction Information Key is for the customers that want to get their last transaction information. When the customers want to get their last transaction information, they need to send an SMS that starts with this key and go on with the customer meter serial number.", + "thisPeriod": "This Period", + "ticketCategories": "Ticket Categories", + "ticketDetails": "Ticket Details", + "ticketLabels": "That tickets will be payed out to a third party person (non Employee) | By any question please get in touch with {email}", + "ticketNotify": "Ticket closed successfully. | Comment send successfully.", + "ticketUserNotify": "User added successfully. | {tag} not found in the Ticketing system!", + "ticketingSystemTag": "Ticketing System Tag", + "ticketsOverview": "Tickets Overview | Opened Tickets are on the left side and resolved tickets on the right side", + "toDate": "To Date", + "totalCost": "Total Cost", + "totalRevenue": "Total Revenue", + "transactionCancelled": "Transaction cancelled", + "transactionId": "Transaction ID", + "transactionIdentifier": "Transaction Identifier", + "transactionNotify": "There is not enough data to compare", + "transactionProcessing": "Transaction Processing", + "transactionReference": "Transaction Reference", + "untraceableTransaction": "Untraceable transaction", + "updateAddress": "Update Address", + "userForOutsourcing": "User for Outsourcing", + "userId": "User ID", + "userList": "User List", + "userManagement": "User Management", + "userTicket": "User Ticket | User Tickets", + "validUntil": "Valid Until", + "waveComTransaction": "WaveCom Transaction", + "waveMoneyTransaction": "Wave Money Transaction", + "weeklyReports": "Weekly Reports", + "wholeVillage": "Whole Village", + "writeMessage": "Write a message...", + "wrongPassword": "Wrong password", + "yourAuthTokenForSwifta": "Your auth token for Swifta Payments, please share this with Swifta to use this token in their API requests.", + "yourMessage": "Your message will seen like that" + }, + "words": { + "access": "Access", + "activate": "Activate | Activated", + "add": "Add | Added", + "address": "Address | Addresses", + "agent": "Agent | Agents", + "all": "All", + "amount": "Amount", + "analysis": "Analysis", + "annually": "Annually", + "appliance": "Appliance | Appliances", + "apply": "Apply", + "asset": "Asset", + "assign": "Assign | Assigned", + "attention": "Attention", + "authorize": "Authorize | Authorized", + "authorized": "Authorized", + "balance": "Balance", + "base": "Base", + "basic": "Basic", + "battery": "Battery | Batteries", + "birthday": "Birthday", + "body": "Body", + "callback": "Callback", + "cancel": "Cancel | Cancelled", + "category": "Category | Categories", + "city": "City | Cities", + "close": "Close | Closed", + "cluster": "Cluster | Clusters", + "collapse": "Collapse", + "color": "Color", + "column": "Column | Columns", + "comment": "Comment | Comments", + "commission": "Commission", + "compared": "Compared", + "confirm": "Confirm | Confirmed", + "connect": "Connect | Connected", + "connection": "Connection | Connections", + "connectivity": "Connectivity", + "consumption": "Consumption", + "continue": "Continue", + "conversation": "Conversation", + "cost": "Cost", + "create": "Create | Created", + "credit": "Credit", + "currency": "Currency", + "customer": "Customer | Customers", + "date": "Date", + "day": "Day | Daily", + "deactivate": "Deactivate | Deactivated", + "delete": "Delete", + "description": "Description", + "detail": "Detail | Details", + "device": "Device", + "deviceType": "Device Type", + "devices": "Devices", + "disable": "Disable", + "dismiss": "Dismiss", + "done": "Done", + "download": "Download", + "e_bike": "E-Bike | E-Bikes", + "edit": "Edit", + "education": "Education", + "email": "Email", + "employee": "Employee", + "enable": "Enable", + "encryption": "Encryption", + "end": "End", + "energy": "Energy | Energies", + "expand": "Expand", + "female": "Female", + "file": "File", + "filter": "Filter", + "finance": "Finance", + "for": "For", + "gender": "Gender", + "generate": "Generate | Generated", + "group": "Group | Groups", + "history": "History | Histories", + "host": "Host", + "id": "ID", + "incoming": "Incoming", + "key": "Key", + "last": "Last", + "latitude": "Latitude", + "line": "Line", + "list": "List", + "location": "Location | Locations", + "lock": "Lock", + "login": "Login", + "longitude": "Longitude", + "maintenance": "Maintenance", + "male": "Male", + "manufacturer": "Manufacturer | Manufacturers", + "map": "Map", + "message": "Message | Messages", + "meter": "Meter | Meters", + "mileage": "Mileage", + "miniGrid": "Mini-Grid", + "mobile": "Mobile", + "month": "Month | Monthly", + "name": "Name", + "network": "Network", + "new": "New", + "next": "Next", + "no": "No", + "notice": "Notice", + "offline": "Offline", + "online": "Online", + "open": "Open | Opened", + "outgoing": "Outgoing", + "outsourcing": "Outsourcing", + "overview": "Overview", + "owner": "Owner", + "paidFor": "Paid for", + "password": "Password", + "payment": "Payment", + "people": "People", + "percentile": "Percentile | Percentiles", + "period": "Period", + "phase": "Phase", + "phone": "Phone", + "port": "Port", + "previous": "Previous", + "price": "Price", + "primary": "Primary", + "process": "Process | Processed | Processing", + "profile": "Profile | The update has been done.", + "provider": "Provider | Providers", + "rate": "Rate | Rates", + "rateCost": "Installment Cost for {rateType} access to the system", + "reading": "Reading | Readings", + "receipt": "Receipt | Receipts", + "receive": "receive", + "receiver": "Receiver", + "redirect": "Redirect | Redirection", + "refresh": "Refresh", + "register": "Register | Registered", + "reject": "Reject | Rejected", + "relocate": "Relocate", + "report": "Report | Reports", + "revenue": "Revenue | Revenues", + "risk": "Risk", + "sale": "Sale ", + "save": "Save", + "search": "Search", + "select": "Select", + "sell": "Sell | Sold", + "send": "Send", + "sender": "Sender", + "serialNumber": "Serial Number", + "service": "Service", + "shs": "Solar Home System | Solar Home Systems", + "sms": "SMS", + "solar_home_system": "Solar Home System", + "speed": "Speed", + "start": "Start", + "status": "Status", + "street": "Street", + "sub": "Sub", + "subject": "Subject", + "successful": "Successful", + "surname": "Surname", + "system": "System", + "tag": "Tag", + "target": "Target | Targets", + "tariff": "Tariff | Tariffs", + "ticket": "Ticket | Tickets", + "time": "Time", + "title": "Title", + "to": "To", + "token": "Token", + "total": "Total", + "transaction": "Transaction | Transactions", + "trend": "Trend | Trends", + "type": "Type | Types", + "unauthorized": "Unauthorized", + "unlock": "Unlock", + "update": "Update | Updated", + "user": "User | Users", + "value": "Value", + "village": "Village", + "week": "Week | Weekly", + "yes": "Yes", + "yesterday": "Yesterday" + } } diff --git a/Website/ui/src/assets/locales/fr.json b/Website/ui/src/assets/locales/fr.json index 14a7f67ec..c7ba2da9e 100644 --- a/Website/ui/src/assets/locales/fr.json +++ b/Website/ui/src/assets/locales/fr.json @@ -1,562 +1,562 @@ { - "menu": { - "Agents": "Agents", - "Angaza SHS": "Angaza SHS", - "Appliances": "appareils", - "Asset Types": "Types de biens", - "Bulk Registration": "Enregistrement en masse", - "Calin Meter": "Calin Meter", - "CalinSmart Meter": "CalinSmart Meter", - "Clusters": "Regroupements de mini-réseaux", - "Connection": "Connexion", - "Connection Types": "Types de Connexion", - "Customers": "Clients", - "Daly Bms": "Daly BMS", - "Dashboard": "Tableau de bord", - "E-Bikes": "E-Bikes", - "GomeLong Meter": "GomeLong Meter", - "Kelin Meter": "Kelin Meter", - "Locations": "Sites", - "Maintenance": "Maintenance", - "Messages": "Messages", - "Meters": "Compteurs", - "MicroStar Meter": "MicroStar Meter", - "Mini-Grid": "Mini-réseau", - "Mini-Grids": "Mini-réseaux", - "Reports": "Rapports", - "Sms": "SMS", - "Solar Home Systems": "Kit Solaire", - "Spark Meter": "Spark Meter", - "Steamaco Meter": "Steamaco Meter", - "Stron Meter": "Stron Meter", - "SunKing SHS": "SunKing SHS", - "Swifta": "Swifta", - "Targets": "Objectifs", - "Tariffs": "Tarifs", - "Tickets": "Tickets", - "Transactions": "Transactions", - "Viber Messaging": "Viber Messaging", - "Wave Money": "Wave Money", - "Wavecom Payment Provider": "Wavecom Payment Provider", - "subMenu": { - "Agents": "Agents", - "Categories": "Catégories", - "Clusters": "Regroupements de mini-réseaux", - "Commission Types": "Types de commission", - "Config": "Configuration", - "Customers": "Clients", - "Groups": "Groupes", - "List": "Liste", - "Message List": "Liste des messages", - "Meter Models": "Modèles de compteurs", - "Meters": "Mètres", - "Mini-Grid": "Mini-réseau", - "New Message": "Nouveau message", - "New Sms": "Nouveau SMS", - "Overview": "Aperçu", - "Sales Accounts": "Comptes de vente", - "Settings": "Paramètres", - "Sites": "Des sites", - "Sms List": "Liste des SMS", - "Tariffs": "Tarifs", - "Types": "Types", - "Users": "Utilisateurs", - "addCluster": "Ajouter un regroupement de mini-réseaux", - "addMiniGrid": "Ajouter un mini-réseau", - "addVillage": "Ajouter un village" - } - }, - "messages": { - "paymentAmountCannotBeLess": "Payment amount cannot be less than {amount}", - "successfullyCreated": "{item} Successfully Created", - "successfullyUpdated": "{item} Successfully Updated" - }, - "phrases": { - "3daysAgo": "Il y a 3 jours", - "Appliance Payment": "Appliance Payment", - "Appliance Payment Reminder": "Appliance Payment Reminder", - "Balance Feedback": "Balance Feedback", - "Last Transaction Information Not Found": "Last Transaction Information Not Found", - "Low Balance Limit Notify": "Low Balance Limit Notify", - "Meter Charge": "Meter Charge", - "Meter Reset Failed Feedback": "Meter Reset Failed Feedback", - "Meter Reset Feedback": "Meter Reset Feedback", - "Overdue Appliance Payment Reminder": "Overdue Appliance Payment Reminder", - "Pricing Details": "Pricing Details", - "Resend Last Transaction Information": "Resend Last Transaction Information", - "Sms Footer": "SMS Footer", - "Sms Header": "SMS Header", - "Tariff Fixed Cost": "Tariff Fixed Cost", - "TicketingSystemTag": "Ticketing System Tag", - "accessRate": "Tarif d'accès", - "accessRateDebt": "Dette du tarif d'accès", - "accessRatePeriodInDays": "Durée du tarif d'accès en jours", - "accessRatePrice": "Prix du tarif d'accès", - "addAdditionalCostComponent": "Ajouter un élément de coût supplémentaire", - "addAdditionalSmsAndroidSetting": "Add Additional SMS Android Setting", - "addBalance": "Ajouter un solde | Solde ajouté avec succès !", - "addCommissionType": "Ajouter un type de commission | Commission d'agent ajoutée avec succès !", - "addCustomer": "Ajouter un client", - "addNewType": "Ajouter un nouveau type", - "addReceipt": "Ajouter un reçu | Reçu ajouté avec succès ! | Cet agent n'est pas redevable au fournisseur d'énergie.", - "addReceiptNotify": "Le montant du reçu suggéré est {energySupplier} | Le montant maximal du reçu doit être égal à { dueToEnergySupplier }.", - "addTou": "Ajouter TOU (Time of Usage)", - "agentCommissionDeleted": "Commission d'agent supprimée !", - "agentCommissionUpdated": "Commission d'agent mise à jour !", - "agentTicket": "Ticket de l'agent | Tickets de l'agent", - "agentTransaction": "Transaction de l'agent | Transactions de l'agent", - "allNetworkProviders": "Tous les fournisseurs de réseaux ", - "allTariffs": "Tous les tarifs", - "allTransactions": "Toutes les transactions", - "anyCategory": "Toute catégorie", - "anyUser": "Tout utilisateur", - "apiKey": "API Key", - "apiToken": "API Token", - "appliance": "Appliance | Appliances", - "applianceCommission": "Commission de l'appareil", - "assetType": "Type de bien | Types de bien", - "assignAppliance": "Attribuer un appareil | Appareils attribués | Appareil(s) attribué(s) avec succès !", - "assignClusterManager": "Désigner un responsable d'un regroupement de mini-réseaux", - "assignFor": "Attribuer pour | Attribué pour", - "assignTo": "Attribuer à | Attribué à", - "authenticationToken": "Jeton d'authentification", - "averagePeriod": "Période moyenne", - "avgRevenue": "Revenu moyen", - "avgRevenuePerConnection": "Revenu moyen par connexion", - "balanceHistories": "Historique des soldes", - "batteryChargeStatus": "État de charge de la batterie", - "batteryLevel": "Battery Level", - "batteryPvCharts": "Graphiques Batterie & PV", - "batteryVoltage": "Battery Voltage", - "bulkSms": "SMS en vrac | Êtes-vous sûr(e) de vouloir envoyer les SMS en vrac ? | Les SMS sont envoyés.", - "businessNumber": "Numéro de l'entreprise", - "changePassword": "Changer le mot de passe", - "closedTicket": "Ticket fermé", - "clusterMap": "Carte des regroupements de mini-réseaux", - "clustersDashboard": "Clusters Dashboard", - "commissionType": " Type de commission | Types de commission", - "comparedPeriod": "Période comparée", - "componentPrice": "Prix de la composante", - "confirmPassword": "Confimer le mot de passe", - "connectedMeters": "Compteurs connectés", - "connectedPower": "Puissance connectée", - "connectionGroup": "Groupe de connexion | Groupes de connexion", - "connectionType": "Type de connexion | Types de connexion", - "connectionTypeDetails": "Détails sur le type de connexion", - "conversationId": "Identifiant de la conversation", - "createFirsRecord": "Créer votre premier dossier | Créer votre premier dossier {data}", - "createdAt": "Créé le", - "createdDate": "Date de création", - "customerList": "Liste de clients", - "dataLogger": "Enregistreur de données | L'enregistreur de données est activé. | L'enregistreur de données est désactivé.", - "deferredDebt": "Dette différée", - "deferredPayment": "Paiement différé", - "deleteAgent": "Supprimer l'agent | Agent supprimé avec succès ! | Agent mis à jour avec succès ! | Je confirme que {name} va être supprimer.", - "deleteAgentCommission": "Supprimer la commission de l'agent | Je confirme que {commissionName} va être supprimer. ", - "deleteAppliance": "Supprimer l'appliance", - "deleteAssetType": "Supprimer le type de bien | Type de bien supprimé avec succès ! | Êtes-vous sûr(e) de vouloir supprimer ce type de bien ? | Type de bien mis à jour avec succès !", - "deleteCustomer": "Supprimer le client | Client supprimé avec succès !", - "deleteCustomerNotify": "Je confirme que {name} {surname} va être supprimer. ", - "deleteMeter": "Supprimer le compteur | Je confirme la suppression de {serialNumber}", - "deleteMeterNotify": "Vous devez confirmer la suppression du compteur | Compteur supprimé avec succès !", - "distributeThis": "Please distribute this to your customers and ask them to send their meter number to register our Viber communication system.", - "downPayment": "Down Payment", - "dueDate": "Date d'échéance", - "editConnectionGroup": "Modifier le groupe de connexion | Êtes-vous sûr(e) de vouloir changer le nom du groupe de connexion ? | Groupe de connexion mis à jour avec succès !", - "editConnectionType": "Modifier le type de connexion", - "editConnectionTypeNotify": "Type de connexion mis à jour avec succès ! | Êtes-vous sûr(e) de vouloir changer le nom du type de connexion à {name} ?", - "editRate": "Modifier le tarif", - "editSubConnectionType": "Modifier le sous-type de connexion", - "editSubConnectionTypeNotify": "Êtes-vous sûr(e) de vouloir changer ce sous-type de connexion ? | Sous-type de connexion mis à jour avec succès !", - "enableAccessRate": "Activer le tarif d'accès", - "enableMinimumPurchaseAmount": "Enable Minimum Purchase Amount", - "energyCommission": "Commission d'énergie", - "expireSession": "La session va bientôt expirer.", - "expireSessionLabel": "Si vous souhaitez prolonger votre session pour les 60 (soixante) minutes suivantes, veuillez confirmer cette fenêtre. | Votre session va expirer dans {expires_in} secondes.", - "financeOverview": "Aperçu des finances (Période:{period})", - "flatLoadLimit": "Limite de charge forfaitaire", - "flatPrice": "Prix forfaitaire", - "forgotPassword": "Mot de passe oublié | Veuillez entrer l'adresse courriel que vous utilisez dans le système.", - "fromDate": "Date du début", - "getUpdatesFrom": "Obtenir des mises à jour de {x}", - "inReturn": "Pour", - "inXSeconds": "Dans {x} secondes", - "incomingTransactions": "Transactions entrantes", - "isPrimary": "Est primaire", - "jobTitle": "Titre du poste", - "lastDataReceived": "Last Data Received", - "lastPayment": "Dernier paiement", - "lastReceipts": "Derniers reçus", - "lastSyncDate": "Dernière date de synchronisation", - "lastTransactions": "Dernières transactions", - "lastUpdate": "Dernière mise à jour", - "lastXDays": "Derniers {x} jours", - "listOfTickets": "Liste de tickets", - "livingIn": "Vivant à", - "loadingChartData": "Chargement des données des graphiques", - "loadingData": "Chargement des données", - "loanRate": "Tarif de prêt", - "logOut": "Log Out", - "loginNotify": "La façon la plus simple pour gérer votre mini-réseau | Échec de l'authentification. Veuillez vérifier vos données d'identification.", - "manufacturerName": "Manufacturer Name", - "mapProvider": "Fournisseur de cartes", - "maxCurrent": "Courant maximal", - "merchantId": "Merchant ID", - "messageNotify": "Le message doit contenir plus de 3 lettres.", - "messageText": "Texte du message", - "meterDetail": "Détail du compteur | Détails du compteur", - "meterDetailNotify": "Erreur inattendue | Veuillez prendre contact avec votre administrateur système. | Un nouveau propriétaire est nécessaire.", - "meterDetailNotify2": "Veuillez choisir un nouveau propriétaire. | Réattribuer le compteur ? | Êtes-vous sûr(e) de vouloir réattribuer ce compteur de {name} à {newName} ?", - "meterReadings": "Relevés de compteurs", - "meterTransaction": "Transaction du compteur | Transactions du compteur", - "meterTypes": "Type de compteurs", - "miniGridMap": "Carte des mini-réseaux", - "minimumPayableAmount": "Montant minimum à payer (accès au système pendant 7 jours) | Montant minimum à payer (accès au système pendant 30 jours)", - "minimumPurchaseAmount": "Minimum Purchase Amount", - "minimumPurchaseAmountDescription": "This field represents minimum price of the purchase the customer can do. You can leave it as zero If you do not want to apply this feature", - "missingField": "Champ manquant", - "mobileProvider": "Fournisseur de téléphonie mobile", - "modelName": "Model Name", - "monthlyAvg": "Moyenne mensuelle", - "monthlyReports": "Rapports mensuels", - "mpesaReceipt": "Reçu Mpesa", - "mustBeNegative": "Doit être négatif", - "namingCluster": "Nommer le regroupement de mini-réseaux", - "newAddress": "Nouvelle adresse", - "newAgent": "Nouvel agent | Agent ajouté avec succès !", - "newAppliance": "New Appliance | Appliance Registered Successfully", - "newAssetType": "Nouveau type de bien | Type de bien enregistré avec succès !", - "newCategory": "Nouvelle catégorie | Nouvelle catégorie ajoutée avec succès !", - "newCluster": "Nouveau regroupement de mini-réseaux | Il n'y a pas de résultat pour {clusterName}. Veuillez utiliser l'outil 'Dessiner un Polygone' pour tracer la zone délimitant votre regroupement.", - "newClusterNotify": "Vous n'avez pas entré de nom pour le regroupement de mini-réseaux. Veuillez attribuer un nom au regroupement. | Emplacement du regroupement de mini-réseaux non sélectionné | Veuillez sélectionner/tracer la zone délimitant le regroupement.", - "newClusterNotify2": "Gestionnaire du regroupement de mini-réseaux non sélectionné | Veuillez sélectionner un gestionnaire du regroupement. | Le regroupement de mini-réseaux ajouté est enregistré avec succès !", - "newComment": "Nouveau commentaire", - "newConnection": "Nouvelle connexion | Nouvelles connexions", - "newConnectionGroup": "Nouveau regroupement de connexion | Regroupement de connextion enregistré", - "newConnectionType": "Nouveau type de connexion | Type de connexion enregistré", - "newConnectionsTarget": "Nouvelles connexions / Objectif", - "newEBike": "New E-Bike | New E-Bike created successfully", - "newMaintenanceRequest": "Nouvelle demande d'entretien | Tâche créée avec succès ! La personne en question sera notifiée par SMS.", - "newMaintenanceUser": "Nouveau fournisseur de services de maintenance | Personne chargée des services de maintenance créée avec succès !", - "newMeterType": "Nouveau type de compteur | Type de compteur ajouté avec succès !", - "newMiniGrid": "Nouveau mini-réseau | Le mini-réseau ajouté est enregistré avec succès !", - "newOwner": "Nouveau propriétaire", - "newShs": "Nouveau Kit Solaire | Création réussie d'un nouveau Kit Solaire", - "newSms": "Nouveau SMS", - "newSubConnectionType": "Nouveau sous-type de connexion | Le sous-type de connexion est enregistré.", - "newTarget": "Nouvel objectif | Choisir une destination pour l'objectif", - "newTargetNotify": "Veuillez remplir tous les champs obligatoires | Objectif enregistré avec succès !", - "newTariff": "Nouveau tarif | Nouveau tarif enregistré avec succès", - "newTariffLabels": "Prix du kWh (les deux derniers chiffres représentent deux décimales. Exemple: 100 = 1.00) | Afin d'utiliser ce champ, les compteurs qui utiliseront le tarif doivent être adaptés au TOU.", - "newTicket": "Nouveau tickets", - "newTicketingUser": "Nouvel utilisateur du système de tickets", - "newUser": "Nouvel utilisateur | Nouvel utilisateur créé avec succès !", - "newVillage": "Nouveau village", - "newVillageNotify": "Le village ajouté est enregistré avec succès !", - "noData": "Pas de données | Aucune donnée trouvée", - "noDataFoundFor": "Aucune donnée trouvée pour {data}", - "noOne": "Personne", - "onlyApproved": "Approuvé seulement", - "onlyRejected": "Rejeté seulement", - "openTicket": "Ticket ouvert", - "orderId": "Order ID", - "originatorConversationId": "Originator Conversation Id", - "outgoingSms": "SMS sortant", - "overDueReminderRate": "Over Due Reminder Rate (Day)", - "paginateLabels": "Affichage de {from} à {to} des {total} entrées", - "paidFor": "Payé", - "passwordProtected": "Zone protégée par un mot de passe | Veuillez entrer le mot de passe pour accèder à cette zone.", - "paymentDistribution": "Répartition des paiements", - "paymentFlow": "Flux de paiement | {currency} moyenne mensuelle pendant {count} mois", - "paymentOverview": "Aperçu des paiements {period}", - "paymentRequests": "Demandes de paiement", - "paymentService": "Service de paiement", - "paymentType": "Type de paiement", - "perPage": "Par page", - "personalInformation": "Informations personnelles", - "pleaseShareThis": "Please share this link with your customers for making their online payments.", - "preparingChartData": "Préparation des données du graphique", - "processTime": "Durée du processus", - "processedTransactions": "Transactions traitées", - "providerSpecificInformation": "Informations spécifiques au fournisseur", - "purchaseCode": "Code d'achat", - "rateType": "Type de tarif", - "ratesCount": "Nombre de tarifs | Tarifs des biens mis à jour avec succès !", - "redirectLabel": "Vous devez ajouter {imperativeItem} pour utiliser cet endroit.", - "referenceId": "Reference ID", - "refreshData": "Refresh Data", - "registeredClusters": "Regroupements de mini-réseaux enregistrés", - "registeredCustomers": "Clients enregistrés", - "relocateMeter": " Déplacer le compteur| Êtes-vous sûr(e) de vouloir déplacer le(s) compteur(s) sélectionné(s) ? | Compteur(s) déplacé(s) avec succès !", - "remainingAmount": "Montant restant", - "reminderRate": "Reminder Rate (Day)", - "responsibleFor": "Responsable du mini-réseau", - "revenueAnalysis": "Analyse des revenus", - "revenueColumns": "Revenus (barres)", - "revenueLine": "Revenus (courbes)", - "revenuePerCustomerType": " Revenu par type de client | Pas de données pour la période sélectionnée.", - "revenuePercentiles": "Revenus (pourcentages)", - "revenueTargetsPerCustomerType": "Objectifs de revenus par type de client | Revenus ciblés", - "revenueTrends": "Évolution des revenus", - "riskBalance": "Bilan des risques", - "sameDayLastWeek": "Même jour de la semaine dernière", - "searchResultFor": "Résultat de la recherche pour", - "secretKey": "Secret Key", - "selectColor": "Sélectionner une couleur", - "selectDevice": "Select a Device to bind with this appliance", - "selectMiniGrid": "Sélectionnez un mini-réseau | L'enregistreur des données du mini-réseau est actif.", - "selectPeriod": "Sélectionner une période pour les données", - "sellAsset": "Vendre un bien | Nouveau bien vendu avec succès. | Êtes-vous sûr(e) de vouloir vendre le bien au prix de {cost}", - "sentDate": "Date d'envoi", - "serialNumber": "Numéro de série", - "setPoints": "Points de réference", - "signIn": "Se connecter", - "smsHistory": "Historique des SMS", - "smsList": "Liste des SMS", - "smsListNotify": "Le message doit contenir plus de 3 lettres | Le SMS est envoyé", - "socialTariff": "Tarif social | Prix par kWh | Budget énergétique initial", - "socialTariffLabels": "Allocation quotidienne au tarif social | Énergie maximale empilée", - "socialTariffOptions": "Afficher les options du tarif social | Cacher les options du tarif social", - "soldAppliances": "Appareils vendus", - "soldAssets": "Biens vendus", - "soldDate": "Date de vente", - "soldEnergy": "Énergie vendue (basée sur les transactions)", - "somethingWentWrong": "Quelque chose a mal tourné.", - "sparkMeterNotify": "Les modèles de compteurs doivent être synchronisés pour synchroniser les clients. | Les tarifs doivent être synchronisés pour synchroniser les clients.", - "statusNow": "Statut actuel", - "stepperLabels": "La limite gratuite de l'enregistreur de données du mini-réseau est dépassée. Votre liste de mini-réseaux activée est indiquée ci-dessous. | Vous pouvez désactiver l'un d'entre eux, ou vous pouvez commander d'autres créneaux ci-dessous.", - "stepperLabels2": "Veuillez compléter la transaction en saisissant le code fourni lors de l'achat. | Vous avez acheté un créneau supplémentaire pour l'enregistrement des données du mini-réseau.", - "stepperLabels3": "Vous avez acheté cinq créneaux supplémentaires pour ajouter de nouveaux responsables au système. | Nous n'avons pas pu traiter votre paiement. Veuillez contacter l'administrateur.", - "stepperLabels4": "La limite gratuite des utilisateurs de la maintenance est dépassée.| Vous pouvez commander d'autres créneaux ci-dessous.", - "subConnectionTypes": "Sous-types de connexions", - "subTargets": "Sous-objectifs", - "subTypes": "Sous-types", - "successfullyUpdated": "Successfully Updated", - "swiftaTransaction": "SwiftaTransaction", - "targetsForConnectionTypes": "Objectifs pour les types de connexion", - "tariffDetail": "Détail du tarif | Êtes-vous sûr(e) de vouloir actualiser ce tarif ?", - "tariffNotify": "Tarif supprimé avec succès ! | Le tarif a été modifié pour l'utilisation des compteurs avec succès ! | Ce tarif est utilisé par {usageCount} compteurs. Êtes-vous sûr(e) de vouloir mettre à jour ce tarif ?", - "tariffNotify2": "Êtes-vous sûr de vouloir supprimer ce tarif ? | Ce tarif est utilisé par {usageCount} compteurs. Vous devez confirmer vouloir changer les tarifs des compteurs. Êtes-vous sûr(e) de vouloir supprimer ce tarif ?", - "thisKeyWillUseIn": "Resend Last Transaction Information Key is for the customers that want to get their last transaction information. When the customers want to get their last transaction information, they need to send an SMS that starts with this key and go on with the customer meter serial number.", - "thisPeriod": "Période actuelle", - "ticketCategories": "Catégories de tickets", - "ticketDetails": "Détails des tickets", - "ticketLabels": "Ces tickets seront payés à un tiers (Non-employé). | En cas de questions, veuillez prendre contact avec {email}.", - "ticketNotify": "Le ticket a été fermé avec succès ! | Commentaire envoyé avec succès !", - "ticketUserNotify": "Utilisateur ajouté avec succès ! | {tag} introuvable dans le système de tickets !", - "ticketingSystemTag": "Tag du système de tickets", - "ticketsOverview": "Aperçu des tickets | Les tickets ouverts se trouvent sur la gauche et les tickets résolus sur la droite.", - "toDate": "Date de fin", - "totalCost": "Coût total", - "totalRevenue": "Revenu total", - "transactionCancelled": "Transaction cancelled", - "transactionId": "ID de la transaction", - "transactionIdentifier": "Transaction Identifier", - "transactionNotify": "Il n'y a pas assez de données à comparer.", - "transactionProcessing": "Traitement des transactions", - "transactionReference": "Transaction Reference", - "untraceableTransaction": "Untraceable transaction", - "updateAddress": "Mettre l'adresse à jour", - "userForOutsourcing": "Utilisateur à externaliser", - "userId": "User ID", - "userList": "Liste des utilisateurs", - "userManagement": "Gestion des utilisateurs", - "userTicket": "ticket d'utilisateur | tickets d'utilisateur", - "validUntil": "Valable jusqu'au", - "waveComTransaction": "WaveCom Transaction", - "waveMoneyTransaction": "Wave Money Transaction", - "weeklyReports": "Rapports hebdomadaires", - "wholeVillage": "Tout le village", - "writeMessage": "Rédiger un message...", - "wrongPassword": "Mot de passe erroné", - "yourAuthTokenForSwifta": "Your auth token for Swifta Payments, please share this with Swifta to use this token in their API requests.", - "yourMessage": "Your message will seen like that" - }, - "words": { - "access": "Accès", - "activate": "Activer| Activé", - "add": "Ajouter | Ajouté", - "address": "Adresse | Adresses", - "agent": "Agent | Agents", - "all": "Tout", - "amount": "Montant", - "analysis": "Analyse", - "annually": "Annuel", - "appliance": "Appareil | Appareils", - "apply": "Appliquer", - "asset": "Bien", - "assign": "Affecter | Affecté", - "attention": "Attention", - "authorize": "Authoriser| Authorisé", - "authorized": "Authorized", - "balance": "Solde", - "base": "Base", - "basic": "Basique", - "battery": "Batterie | Batteries", - "birthday": "Date de naissance", - "body": "Texte du message", - "callback": "Callback", - "cancel": "Annuler | Annulé", - "category": "Catégorie | Catégories", - "city": "Ville | Villes", - "close": "Fermer | Fermé", - "cluster": "Regroupement de mini-réseaux | Regroupements de mini-réseaux", - "collapse": "Fermer", - "color": "Couleur", - "column": "Colonne | Colonnes", - "comment": "Commentaire | Commentaires", - "commission": "Commission", - "compared": "Comparé", - "confirm": "Confirmer | Confirmé", - "connect": "Se connecter | Connecté", - "connection": "Connexion | Connexions", - "connectivity": "Connectivité", - "consumption": "Consommation", - "continue": "Continuer", - "conversation": "Conversation", - "cost": "Coût", - "create": "Créer | Créé", - "credit": "Crédit", - "currency": "Monnaie", - "customer": "Client | Clients", - "date": "Date", - "day": "Jour | Quotidien", - "deactivate": "Désactiver | Désactivé", - "delete": "Supprimer", - "description": "Description", - "detail": "Détail | Détails", - "device": "device", - "deviceType": "Device Type", - "devices": "Devices", - "disable": "Désactiver", - "dismiss": "Rejeter", - "done": "Effectué", - "download": "Télécharger", - "e_bike": "E-Bike | E-Bikes", - "edit": "Modifier", - "education": "Éducation", - "email": "Courriel", - "employee": "Employé", - "enable": "Activer", - "encryption": "Encryption", - "end": "Fin", - "energy": "Énergie | Énergies", - "expand": "Étendre", - "female": "Femme", - "file": "Fichier", - "filter": "Filtrer", - "finance": "Finance", - "for": "Pour", - "gender": "Genre", - "generate": "Générer | Généré", - "group": "Groupe | Groupes", - "history": "Historique | Historiques", - "host": "Host", - "id": "ID", - "incoming": "Entrant", - "key": "Key", - "last": "Dernier", - "latitude": "Latitude", - "line": "Ligne", - "list": "Liste", - "location": "Localisation | Localisations", - "lock": "Lock", - "login": "Login", - "longitude": "Longitude", - "maintenance": "Maintenance", - "male": "Homme", - "manufacturer": "Fabricant | Fabricants", - "map": "Carte", - "message": "Message | Messages", - "meter": "Compteur | Compteurs", - "mileage": "Mileage", - "miniGrid": "Mini-réseau", - "minimumPayableAmount": "Minimum Payable Amount (access to the system for 7 days)", - "mobile": "Portable", - "month": "Mois | Mensuel", - "name": "Nom", - "network": "Réseau", - "new": "Nouveau", - "next": "Suivant", - "no": "Non", - "notice": "Notice", - "offline": "Hors ligne", - "online": "En ligne", - "open": "Ouvrir | Ouvert", - "outgoing": "Sortant", - "outsourcing": "Sous-traitance", - "overview": "Aperçu", - "owner": "Propriétaire", - "paidFor": "Payé pour", - "password": "Mot de passe", - "payment": "Paiement", - "people": "Personnes", - "percentile": "Pourcentage | Pourcentages", - "period": "Période", - "phase": "Phase", - "phone": "Téléphone", - "port": "Port", - "previous": "Précédent", - "price": "Prix", - "primary": "Primaire", - "process": "Processus | Traité | Traitement", - "profile": "Profil | La mise à jour a été effectuée.", - "provider": "Fournisseur | Fournisseurs", - "rate": "Tarif | Tarifs", - "rateCost": "Installment Cost for Monthly access to the system", - "reading": "Lecture | Lectures", - "receipt": "Reçu | Reçus", - "receive": "recevoir", - "receiver": "Récepteur", - "redirect": "Rediriger | Redirection", - "refresh": "Actualiser", - "register": "S'inscrire | Inscrit", - "reject": "Rejeter | Rejeté", - "relocate": "Relocaliser", - "report": "Rapport | Rapports", - "revenue": "Revenu | Revenus", - "risk": "Risque", - "sale": "Vente", - "save": "Enregistrer", - "search": "Rechercher", - "select": "Sélectionner", - "sell": "Vendre | Vendu", - "send": "Envoyer", - "sender": "Expéditeur", - "serialNumber": "Numéro de série", - "service": "Service", - "shs": "Solar Home System | Solar Home Systems", - "sms": "SMS", - "solar_home_system": "Solar Home System", - "speed": "Speed", - "start": "Début", - "status": "Statut", - "street": "Rue", - "sub": "Sous-", - "subject": "Sujet", - "successful": "Avec succès", - "surname": "Nom de famille", - "system": "Système", - "tag": "Tag", - "target": "Objectif | Objectifs", - "tariff": "Tarif | Tarifs", - "ticket": "Ticket | Tickets", - "time": "Temps", - "title": "Titre", - "to": "À", - "token": "Jeton", - "total": "Total", - "transaction": "Transaction | Transactions", - "trend": "Tendance | Tendances", - "type": "Type | Types", - "unauthorized": "Non autorisé", - "unlock": "Unlock", - "update": "Mise à jour | Mis à jour", - "user": "Utilisateur | Utilisateurs", - "value": "Valeur", - "village": "Village", - "week": "Semaine | Hebdomadaire", - "yes": "Oui", - "yesterday": "Hier" + "menu": { + "Agents": "Agents", + "Angaza SHS": "Angaza SHS", + "Appliances": "appareils", + "Asset Types": "Types de biens", + "Bulk Registration": "Enregistrement en masse", + "Calin Meter": "Calin Meter", + "CalinSmart Meter": "CalinSmart Meter", + "Clusters": "Regroupements de mini-réseaux", + "Connection": "Connexion", + "Connection Types": "Types de Connexion", + "Customers": "Clients", + "Daly Bms": "Daly BMS", + "Dashboard": "Tableau de bord", + "E-Bikes": "E-Bikes", + "GomeLong Meter": "GomeLong Meter", + "Kelin Meter": "Kelin Meter", + "Locations": "Sites", + "Maintenance": "Maintenance", + "Messages": "Messages", + "Meters": "Compteurs", + "MicroStar Meter": "MicroStar Meter", + "Mini-Grid": "Mini-réseau", + "Mini-Grids": "Mini-réseaux", + "Reports": "Rapports", + "Sms": "SMS", + "Solar Home Systems": "Kit Solaire", + "Spark Meter": "Spark Meter", + "Steamaco Meter": "Steamaco Meter", + "Stron Meter": "Stron Meter", + "SunKing SHS": "SunKing SHS", + "Swifta": "Swifta", + "Targets": "Objectifs", + "Tariffs": "Tarifs", + "Tickets": "Tickets", + "Transactions": "Transactions", + "Viber Messaging": "Viber Messaging", + "Wave Money": "Wave Money", + "Wavecom Payment Provider": "Wavecom Payment Provider", + "subMenu": { + "Agents": "Agents", + "Categories": "Catégories", + "Clusters": "Regroupements de mini-réseaux", + "Commission Types": "Types de commission", + "Config": "Configuration", + "Customers": "Clients", + "Groups": "Groupes", + "List": "Liste", + "Message List": "Liste des messages", + "Meter Models": "Modèles de compteurs", + "Meters": "Mètres", + "Mini-Grid": "Mini-réseau", + "New Message": "Nouveau message", + "New Sms": "Nouveau SMS", + "Overview": "Aperçu", + "Sales Accounts": "Comptes de vente", + "Settings": "Paramètres", + "Sites": "Des sites", + "Sms List": "Liste des SMS", + "Tariffs": "Tarifs", + "Types": "Types", + "Users": "Utilisateurs", + "addCluster": "Ajouter un regroupement de mini-réseaux", + "addMiniGrid": "Ajouter un mini-réseau", + "addVillage": "Ajouter un village" } + }, + "messages": { + "paymentAmountCannotBeLess": "Payment amount cannot be less than {amount}", + "successfullyCreated": "{item} Successfully Created", + "successfullyUpdated": "{item} Successfully Updated" + }, + "phrases": { + "3daysAgo": "Il y a 3 jours", + "Appliance Payment": "Appliance Payment", + "Appliance Payment Reminder": "Appliance Payment Reminder", + "Balance Feedback": "Balance Feedback", + "Last Transaction Information Not Found": "Last Transaction Information Not Found", + "Low Balance Limit Notify": "Low Balance Limit Notify", + "Meter Charge": "Meter Charge", + "Meter Reset Failed Feedback": "Meter Reset Failed Feedback", + "Meter Reset Feedback": "Meter Reset Feedback", + "Overdue Appliance Payment Reminder": "Overdue Appliance Payment Reminder", + "Pricing Details": "Pricing Details", + "Resend Last Transaction Information": "Resend Last Transaction Information", + "Sms Footer": "SMS Footer", + "Sms Header": "SMS Header", + "Tariff Fixed Cost": "Tariff Fixed Cost", + "TicketingSystemTag": "Ticketing System Tag", + "accessRate": "Tarif d'accès", + "accessRateDebt": "Dette du tarif d'accès", + "accessRatePeriodInDays": "Durée du tarif d'accès en jours", + "accessRatePrice": "Prix du tarif d'accès", + "addAdditionalCostComponent": "Ajouter un élément de coût supplémentaire", + "addAdditionalSmsAndroidSetting": "Add Additional SMS Android Setting", + "addBalance": "Ajouter un solde | Solde ajouté avec succès !", + "addCommissionType": "Ajouter un type de commission | Commission d'agent ajoutée avec succès !", + "addCustomer": "Ajouter un client", + "addNewType": "Ajouter un nouveau type", + "addReceipt": "Ajouter un reçu | Reçu ajouté avec succès ! | Cet agent n'est pas redevable au fournisseur d'énergie.", + "addReceiptNotify": "Le montant du reçu suggéré est {energySupplier} | Le montant maximal du reçu doit être égal à { dueToEnergySupplier }.", + "addTou": "Ajouter TOU (Time of Usage)", + "agentCommissionDeleted": "Commission d'agent supprimée !", + "agentCommissionUpdated": "Commission d'agent mise à jour !", + "agentTicket": "Ticket de l'agent | Tickets de l'agent", + "agentTransaction": "Transaction de l'agent | Transactions de l'agent", + "allNetworkProviders": "Tous les fournisseurs de réseaux ", + "allTariffs": "Tous les tarifs", + "allTransactions": "Toutes les transactions", + "anyCategory": "Toute catégorie", + "anyUser": "Tout utilisateur", + "apiKey": "API Key", + "apiToken": "API Token", + "appliance": "Appliance | Appliances", + "applianceCommission": "Commission de l'appareil", + "assetType": "Type de bien | Types de bien", + "assignAppliance": "Attribuer un appareil | Appareils attribués | Appareil(s) attribué(s) avec succès !", + "assignClusterManager": "Désigner un responsable d'un regroupement de mini-réseaux", + "assignFor": "Attribuer pour | Attribué pour", + "assignTo": "Attribuer à | Attribué à", + "authenticationToken": "Jeton d'authentification", + "averagePeriod": "Période moyenne", + "avgRevenue": "Revenu moyen", + "avgRevenuePerConnection": "Revenu moyen par connexion", + "balanceHistories": "Historique des soldes", + "batteryChargeStatus": "État de charge de la batterie", + "batteryLevel": "Battery Level", + "batteryPvCharts": "Graphiques Batterie & PV", + "batteryVoltage": "Battery Voltage", + "bulkSms": "SMS en vrac | Êtes-vous sûr(e) de vouloir envoyer les SMS en vrac ? | Les SMS sont envoyés.", + "businessNumber": "Numéro de l'entreprise", + "changePassword": "Changer le mot de passe", + "closedTicket": "Ticket fermé", + "clusterMap": "Carte des regroupements de mini-réseaux", + "clustersDashboard": "Clusters Dashboard", + "commissionType": " Type de commission | Types de commission", + "comparedPeriod": "Période comparée", + "componentPrice": "Prix de la composante", + "confirmPassword": "Confimer le mot de passe", + "connectedMeters": "Compteurs connectés", + "connectedPower": "Puissance connectée", + "connectionGroup": "Groupe de connexion | Groupes de connexion", + "connectionType": "Type de connexion | Types de connexion", + "connectionTypeDetails": "Détails sur le type de connexion", + "conversationId": "Identifiant de la conversation", + "createFirsRecord": "Créer votre premier dossier | Créer votre premier dossier {data}", + "createdAt": "Créé le", + "createdDate": "Date de création", + "customerList": "Liste de clients", + "dataLogger": "Enregistreur de données | L'enregistreur de données est activé. | L'enregistreur de données est désactivé.", + "deferredDebt": "Dette différée", + "deferredPayment": "Paiement différé", + "deleteAgent": "Supprimer l'agent | Agent supprimé avec succès ! | Agent mis à jour avec succès ! | Je confirme que {name} va être supprimer.", + "deleteAgentCommission": "Supprimer la commission de l'agent | Je confirme que {commissionName} va être supprimer. ", + "deleteAppliance": "Supprimer l'appliance", + "deleteAssetType": "Supprimer le type de bien | Type de bien supprimé avec succès ! | Êtes-vous sûr(e) de vouloir supprimer ce type de bien ? | Type de bien mis à jour avec succès !", + "deleteCustomer": "Supprimer le client | Client supprimé avec succès !", + "deleteCustomerNotify": "Je confirme que {name} {surname} va être supprimer. ", + "deleteMeter": "Supprimer le compteur | Je confirme la suppression de {serialNumber}", + "deleteMeterNotify": "Vous devez confirmer la suppression du compteur | Compteur supprimé avec succès !", + "distributeThis": "Please distribute this to your customers and ask them to send their meter number to register our Viber communication system.", + "downPayment": "Down Payment", + "dueDate": "Date d'échéance", + "editConnectionGroup": "Modifier le groupe de connexion | Êtes-vous sûr(e) de vouloir changer le nom du groupe de connexion ? | Groupe de connexion mis à jour avec succès !", + "editConnectionType": "Modifier le type de connexion", + "editConnectionTypeNotify": "Type de connexion mis à jour avec succès ! | Êtes-vous sûr(e) de vouloir changer le nom du type de connexion à {name} ?", + "editRate": "Modifier le tarif", + "editSubConnectionType": "Modifier le sous-type de connexion", + "editSubConnectionTypeNotify": "Êtes-vous sûr(e) de vouloir changer ce sous-type de connexion ? | Sous-type de connexion mis à jour avec succès !", + "enableAccessRate": "Activer le tarif d'accès", + "enableMinimumPurchaseAmount": "Enable Minimum Purchase Amount", + "energyCommission": "Commission d'énergie", + "expireSession": "La session va bientôt expirer.", + "expireSessionLabel": "Si vous souhaitez prolonger votre session pour les 60 (soixante) minutes suivantes, veuillez confirmer cette fenêtre. | Votre session va expirer dans {expires_in} secondes.", + "financeOverview": "Aperçu des finances (Période:{period})", + "flatLoadLimit": "Limite de charge forfaitaire", + "flatPrice": "Prix forfaitaire", + "forgotPassword": "Mot de passe oublié | Veuillez entrer l'adresse courriel que vous utilisez dans le système.", + "fromDate": "Date du début", + "getUpdatesFrom": "Obtenir des mises à jour de {x}", + "inReturn": "Pour", + "inXSeconds": "Dans {x} secondes", + "incomingTransactions": "Transactions entrantes", + "isPrimary": "Est primaire", + "jobTitle": "Titre du poste", + "lastDataReceived": "Last Data Received", + "lastPayment": "Dernier paiement", + "lastReceipts": "Derniers reçus", + "lastSyncDate": "Dernière date de synchronisation", + "lastTransactions": "Dernières transactions", + "lastUpdate": "Dernière mise à jour", + "lastXDays": "Derniers {x} jours", + "listOfTickets": "Liste de tickets", + "livingIn": "Vivant à", + "loadingChartData": "Chargement des données des graphiques", + "loadingData": "Chargement des données", + "loanRate": "Tarif de prêt", + "logOut": "Log Out", + "loginNotify": "La façon la plus simple pour gérer votre mini-réseau | Échec de l'authentification. Veuillez vérifier vos données d'identification.", + "manufacturerName": "Manufacturer Name", + "mapProvider": "Fournisseur de cartes", + "maxCurrent": "Courant maximal", + "merchantId": "Merchant ID", + "messageNotify": "Le message doit contenir plus de 3 lettres.", + "messageText": "Texte du message", + "meterDetail": "Détail du compteur | Détails du compteur", + "meterDetailNotify": "Erreur inattendue | Veuillez prendre contact avec votre administrateur système. | Un nouveau propriétaire est nécessaire.", + "meterDetailNotify2": "Veuillez choisir un nouveau propriétaire. | Réattribuer le compteur ? | Êtes-vous sûr(e) de vouloir réattribuer ce compteur de {name} à {newName} ?", + "meterReadings": "Relevés de compteurs", + "meterTransaction": "Transaction du compteur | Transactions du compteur", + "meterTypes": "Type de compteurs", + "miniGridMap": "Carte des mini-réseaux", + "minimumPayableAmount": "Montant minimum à payer (accès au système pendant 7 jours) | Montant minimum à payer (accès au système pendant 30 jours)", + "minimumPurchaseAmount": "Minimum Purchase Amount", + "minimumPurchaseAmountDescription": "This field represents minimum price of the purchase the customer can do. You can leave it as zero If you do not want to apply this feature", + "missingField": "Champ manquant", + "mobileProvider": "Fournisseur de téléphonie mobile", + "modelName": "Model Name", + "monthlyAvg": "Moyenne mensuelle", + "monthlyReports": "Rapports mensuels", + "mpesaReceipt": "Reçu Mpesa", + "mustBeNegative": "Doit être négatif", + "namingCluster": "Nommer le regroupement de mini-réseaux", + "newAddress": "Nouvelle adresse", + "newAgent": "Nouvel agent | Agent ajouté avec succès !", + "newAppliance": "New Appliance | Appliance Registered Successfully", + "newAssetType": "Nouveau type de bien | Type de bien enregistré avec succès !", + "newCategory": "Nouvelle catégorie | Nouvelle catégorie ajoutée avec succès !", + "newCluster": "Nouveau regroupement de mini-réseaux | Il n'y a pas de résultat pour {clusterName}. Veuillez utiliser l'outil 'Dessiner un Polygone' pour tracer la zone délimitant votre regroupement.", + "newClusterNotify": "Vous n'avez pas entré de nom pour le regroupement de mini-réseaux. Veuillez attribuer un nom au regroupement. | Emplacement du regroupement de mini-réseaux non sélectionné | Veuillez sélectionner/tracer la zone délimitant le regroupement.", + "newClusterNotify2": "Gestionnaire du regroupement de mini-réseaux non sélectionné | Veuillez sélectionner un gestionnaire du regroupement. | Le regroupement de mini-réseaux ajouté est enregistré avec succès !", + "newComment": "Nouveau commentaire", + "newConnection": "Nouvelle connexion | Nouvelles connexions", + "newConnectionGroup": "Nouveau regroupement de connexion | Regroupement de connextion enregistré", + "newConnectionType": "Nouveau type de connexion | Type de connexion enregistré", + "newConnectionsTarget": "Nouvelles connexions / Objectif", + "newEBike": "New E-Bike | New E-Bike created successfully", + "newMaintenanceRequest": "Nouvelle demande d'entretien | Tâche créée avec succès ! La personne en question sera notifiée par SMS.", + "newMaintenanceUser": "Nouveau fournisseur de services de maintenance | Personne chargée des services de maintenance créée avec succès !", + "newMeterType": "Nouveau type de compteur | Type de compteur ajouté avec succès !", + "newMiniGrid": "Nouveau mini-réseau | Le mini-réseau ajouté est enregistré avec succès !", + "newOwner": "Nouveau propriétaire", + "newShs": "Nouveau Kit Solaire | Création réussie d'un nouveau Kit Solaire", + "newSms": "Nouveau SMS", + "newSubConnectionType": "Nouveau sous-type de connexion | Le sous-type de connexion est enregistré.", + "newTarget": "Nouvel objectif | Choisir une destination pour l'objectif", + "newTargetNotify": "Veuillez remplir tous les champs obligatoires | Objectif enregistré avec succès !", + "newTariff": "Nouveau tarif | Nouveau tarif enregistré avec succès", + "newTariffLabels": "Prix du kWh (les deux derniers chiffres représentent deux décimales. Exemple: 100 = 1.00) | Afin d'utiliser ce champ, les compteurs qui utiliseront le tarif doivent être adaptés au TOU.", + "newTicket": "Nouveau tickets", + "newTicketingUser": "Nouvel utilisateur du système de tickets", + "newUser": "Nouvel utilisateur | Nouvel utilisateur créé avec succès !", + "newVillage": "Nouveau village", + "newVillageNotify": "Le village ajouté est enregistré avec succès !", + "noData": "Pas de données | Aucune donnée trouvée", + "noDataFoundFor": "Aucune donnée trouvée pour {data}", + "noOne": "Personne", + "onlyApproved": "Approuvé seulement", + "onlyRejected": "Rejeté seulement", + "openTicket": "Ticket ouvert", + "orderId": "Order ID", + "originatorConversationId": "Originator Conversation Id", + "outgoingSms": "SMS sortant", + "overDueReminderRate": "Over Due Reminder Rate (Day)", + "paginateLabels": "Affichage de {from} à {to} des {total} entrées", + "paidFor": "Payé", + "passwordProtected": "Zone protégée par un mot de passe | Veuillez entrer le mot de passe pour accèder à cette zone.", + "paymentDistribution": "Répartition des paiements", + "paymentFlow": "Flux de paiement | {currency} moyenne mensuelle pendant {count} mois", + "paymentOverview": "Aperçu des paiements {period}", + "paymentRequests": "Demandes de paiement", + "paymentService": "Service de paiement", + "paymentType": "Type de paiement", + "perPage": "Par page", + "personalInformation": "Informations personnelles", + "pleaseShareThis": "Please share this link with your customers for making their online payments.", + "preparingChartData": "Préparation des données du graphique", + "processTime": "Durée du processus", + "processedTransactions": "Transactions traitées", + "providerSpecificInformation": "Informations spécifiques au fournisseur", + "purchaseCode": "Code d'achat", + "rateType": "Type de tarif", + "ratesCount": "Nombre de tarifs | Tarifs des biens mis à jour avec succès !", + "redirectLabel": "Vous devez ajouter {imperativeItem} pour utiliser cet endroit.", + "referenceId": "Reference ID", + "refreshData": "Refresh Data", + "registeredClusters": "Regroupements de mini-réseaux enregistrés", + "registeredCustomers": "Clients enregistrés", + "relocateMeter": " Déplacer le compteur| Êtes-vous sûr(e) de vouloir déplacer le(s) compteur(s) sélectionné(s) ? | Compteur(s) déplacé(s) avec succès !", + "remainingAmount": "Montant restant", + "reminderRate": "Reminder Rate (Day)", + "responsibleFor": "Responsable du mini-réseau", + "revenueAnalysis": "Analyse des revenus", + "revenueColumns": "Revenus (barres)", + "revenueLine": "Revenus (courbes)", + "revenuePerCustomerType": " Revenu par type de client | Pas de données pour la période sélectionnée.", + "revenuePercentiles": "Revenus (pourcentages)", + "revenueTargetsPerCustomerType": "Objectifs de revenus par type de client | Revenus ciblés", + "revenueTrends": "Évolution des revenus", + "riskBalance": "Bilan des risques", + "sameDayLastWeek": "Même jour de la semaine dernière", + "searchResultFor": "Résultat de la recherche pour", + "secretKey": "Secret Key", + "selectColor": "Sélectionner une couleur", + "selectDevice": "Select a Device to bind with this appliance", + "selectMiniGrid": "Sélectionnez un mini-réseau | L'enregistreur des données du mini-réseau est actif.", + "selectPeriod": "Sélectionner une période pour les données", + "sellAsset": "Vendre un bien | Nouveau bien vendu avec succès. | Êtes-vous sûr(e) de vouloir vendre le bien au prix de {cost}", + "sentDate": "Date d'envoi", + "serialNumber": "Numéro de série", + "setPoints": "Points de réference", + "signIn": "Se connecter", + "smsHistory": "Historique des SMS", + "smsList": "Liste des SMS", + "smsListNotify": "Le message doit contenir plus de 3 lettres | Le SMS est envoyé", + "socialTariff": "Tarif social | Prix par kWh | Budget énergétique initial", + "socialTariffLabels": "Allocation quotidienne au tarif social | Énergie maximale empilée", + "socialTariffOptions": "Afficher les options du tarif social | Cacher les options du tarif social", + "soldAppliances": "Appareils vendus", + "soldAssets": "Biens vendus", + "soldDate": "Date de vente", + "soldEnergy": "Énergie vendue (basée sur les transactions)", + "somethingWentWrong": "Quelque chose a mal tourné.", + "sparkMeterNotify": "Les modèles de compteurs doivent être synchronisés pour synchroniser les clients. | Les tarifs doivent être synchronisés pour synchroniser les clients.", + "statusNow": "Statut actuel", + "stepperLabels": "La limite gratuite de l'enregistreur de données du mini-réseau est dépassée. Votre liste de mini-réseaux activée est indiquée ci-dessous. | Vous pouvez désactiver l'un d'entre eux, ou vous pouvez commander d'autres créneaux ci-dessous.", + "stepperLabels2": "Veuillez compléter la transaction en saisissant le code fourni lors de l'achat. | Vous avez acheté un créneau supplémentaire pour l'enregistrement des données du mini-réseau.", + "stepperLabels3": "Vous avez acheté cinq créneaux supplémentaires pour ajouter de nouveaux responsables au système. | Nous n'avons pas pu traiter votre paiement. Veuillez contacter l'administrateur.", + "stepperLabels4": "La limite gratuite des utilisateurs de la maintenance est dépassée.| Vous pouvez commander d'autres créneaux ci-dessous.", + "subConnectionTypes": "Sous-types de connexions", + "subTargets": "Sous-objectifs", + "subTypes": "Sous-types", + "successfullyUpdated": "Successfully Updated", + "swiftaTransaction": "SwiftaTransaction", + "targetsForConnectionTypes": "Objectifs pour les types de connexion", + "tariffDetail": "Détail du tarif | Êtes-vous sûr(e) de vouloir actualiser ce tarif ?", + "tariffNotify": "Tarif supprimé avec succès ! | Le tarif a été modifié pour l'utilisation des compteurs avec succès ! | Ce tarif est utilisé par {usageCount} compteurs. Êtes-vous sûr(e) de vouloir mettre à jour ce tarif ?", + "tariffNotify2": "Êtes-vous sûr de vouloir supprimer ce tarif ? | Ce tarif est utilisé par {usageCount} compteurs. Vous devez confirmer vouloir changer les tarifs des compteurs. Êtes-vous sûr(e) de vouloir supprimer ce tarif ?", + "thisKeyWillUseIn": "Resend Last Transaction Information Key is for the customers that want to get their last transaction information. When the customers want to get their last transaction information, they need to send an SMS that starts with this key and go on with the customer meter serial number.", + "thisPeriod": "Période actuelle", + "ticketCategories": "Catégories de tickets", + "ticketDetails": "Détails des tickets", + "ticketLabels": "Ces tickets seront payés à un tiers (Non-employé). | En cas de questions, veuillez prendre contact avec {email}.", + "ticketNotify": "Le ticket a été fermé avec succès ! | Commentaire envoyé avec succès !", + "ticketUserNotify": "Utilisateur ajouté avec succès ! | {tag} introuvable dans le système de tickets !", + "ticketingSystemTag": "Tag du système de tickets", + "ticketsOverview": "Aperçu des tickets | Les tickets ouverts se trouvent sur la gauche et les tickets résolus sur la droite.", + "toDate": "Date de fin", + "totalCost": "Coût total", + "totalRevenue": "Revenu total", + "transactionCancelled": "Transaction cancelled", + "transactionId": "ID de la transaction", + "transactionIdentifier": "Transaction Identifier", + "transactionNotify": "Il n'y a pas assez de données à comparer.", + "transactionProcessing": "Traitement des transactions", + "transactionReference": "Transaction Reference", + "untraceableTransaction": "Untraceable transaction", + "updateAddress": "Mettre l'adresse à jour", + "userForOutsourcing": "Utilisateur à externaliser", + "userId": "User ID", + "userList": "Liste des utilisateurs", + "userManagement": "Gestion des utilisateurs", + "userTicket": "ticket d'utilisateur | tickets d'utilisateur", + "validUntil": "Valable jusqu'au", + "waveComTransaction": "WaveCom Transaction", + "waveMoneyTransaction": "Wave Money Transaction", + "weeklyReports": "Rapports hebdomadaires", + "wholeVillage": "Tout le village", + "writeMessage": "Rédiger un message...", + "wrongPassword": "Mot de passe erroné", + "yourAuthTokenForSwifta": "Your auth token for Swifta Payments, please share this with Swifta to use this token in their API requests.", + "yourMessage": "Your message will seen like that" + }, + "words": { + "access": "Accès", + "activate": "Activer| Activé", + "add": "Ajouter | Ajouté", + "address": "Adresse | Adresses", + "agent": "Agent | Agents", + "all": "Tout", + "amount": "Montant", + "analysis": "Analyse", + "annually": "Annuel", + "appliance": "Appareil | Appareils", + "apply": "Appliquer", + "asset": "Bien", + "assign": "Affecter | Affecté", + "attention": "Attention", + "authorize": "Authoriser| Authorisé", + "authorized": "Authorized", + "balance": "Solde", + "base": "Base", + "basic": "Basique", + "battery": "Batterie | Batteries", + "birthday": "Date de naissance", + "body": "Texte du message", + "callback": "Callback", + "cancel": "Annuler | Annulé", + "category": "Catégorie | Catégories", + "city": "Ville | Villes", + "close": "Fermer | Fermé", + "cluster": "Regroupement de mini-réseaux | Regroupements de mini-réseaux", + "collapse": "Fermer", + "color": "Couleur", + "column": "Colonne | Colonnes", + "comment": "Commentaire | Commentaires", + "commission": "Commission", + "compared": "Comparé", + "confirm": "Confirmer | Confirmé", + "connect": "Se connecter | Connecté", + "connection": "Connexion | Connexions", + "connectivity": "Connectivité", + "consumption": "Consommation", + "continue": "Continuer", + "conversation": "Conversation", + "cost": "Coût", + "create": "Créer | Créé", + "credit": "Crédit", + "currency": "Monnaie", + "customer": "Client | Clients", + "date": "Date", + "day": "Jour | Quotidien", + "deactivate": "Désactiver | Désactivé", + "delete": "Supprimer", + "description": "Description", + "detail": "Détail | Détails", + "device": "device", + "deviceType": "Device Type", + "devices": "Devices", + "disable": "Désactiver", + "dismiss": "Rejeter", + "done": "Effectué", + "download": "Télécharger", + "e_bike": "E-Bike | E-Bikes", + "edit": "Modifier", + "education": "Éducation", + "email": "Courriel", + "employee": "Employé", + "enable": "Activer", + "encryption": "Encryption", + "end": "Fin", + "energy": "Énergie | Énergies", + "expand": "Étendre", + "female": "Femme", + "file": "Fichier", + "filter": "Filtrer", + "finance": "Finance", + "for": "Pour", + "gender": "Genre", + "generate": "Générer | Généré", + "group": "Groupe | Groupes", + "history": "Historique | Historiques", + "host": "Host", + "id": "ID", + "incoming": "Entrant", + "key": "Key", + "last": "Dernier", + "latitude": "Latitude", + "line": "Ligne", + "list": "Liste", + "location": "Localisation | Localisations", + "lock": "Lock", + "login": "Login", + "longitude": "Longitude", + "maintenance": "Maintenance", + "male": "Homme", + "manufacturer": "Fabricant | Fabricants", + "map": "Carte", + "message": "Message | Messages", + "meter": "Compteur | Compteurs", + "mileage": "Mileage", + "miniGrid": "Mini-réseau", + "minimumPayableAmount": "Minimum Payable Amount (access to the system for 7 days)", + "mobile": "Portable", + "month": "Mois | Mensuel", + "name": "Nom", + "network": "Réseau", + "new": "Nouveau", + "next": "Suivant", + "no": "Non", + "notice": "Notice", + "offline": "Hors ligne", + "online": "En ligne", + "open": "Ouvrir | Ouvert", + "outgoing": "Sortant", + "outsourcing": "Sous-traitance", + "overview": "Aperçu", + "owner": "Propriétaire", + "paidFor": "Payé pour", + "password": "Mot de passe", + "payment": "Paiement", + "people": "Personnes", + "percentile": "Pourcentage | Pourcentages", + "period": "Période", + "phase": "Phase", + "phone": "Téléphone", + "port": "Port", + "previous": "Précédent", + "price": "Prix", + "primary": "Primaire", + "process": "Processus | Traité | Traitement", + "profile": "Profil | La mise à jour a été effectuée.", + "provider": "Fournisseur | Fournisseurs", + "rate": "Tarif | Tarifs", + "rateCost": "Installment Cost for Monthly access to the system", + "reading": "Lecture | Lectures", + "receipt": "Reçu | Reçus", + "receive": "recevoir", + "receiver": "Récepteur", + "redirect": "Rediriger | Redirection", + "refresh": "Actualiser", + "register": "S'inscrire | Inscrit", + "reject": "Rejeter | Rejeté", + "relocate": "Relocaliser", + "report": "Rapport | Rapports", + "revenue": "Revenu | Revenus", + "risk": "Risque", + "sale": "Vente", + "save": "Enregistrer", + "search": "Rechercher", + "select": "Sélectionner", + "sell": "Vendre | Vendu", + "send": "Envoyer", + "sender": "Expéditeur", + "serialNumber": "Numéro de série", + "service": "Service", + "shs": "Solar Home System | Solar Home Systems", + "sms": "SMS", + "solar_home_system": "Solar Home System", + "speed": "Speed", + "start": "Début", + "status": "Statut", + "street": "Rue", + "sub": "Sous-", + "subject": "Sujet", + "successful": "Avec succès", + "surname": "Nom de famille", + "system": "Système", + "tag": "Tag", + "target": "Objectif | Objectifs", + "tariff": "Tarif | Tarifs", + "ticket": "Ticket | Tickets", + "time": "Temps", + "title": "Titre", + "to": "À", + "token": "Jeton", + "total": "Total", + "transaction": "Transaction | Transactions", + "trend": "Tendance | Tendances", + "type": "Type | Types", + "unauthorized": "Non autorisé", + "unlock": "Unlock", + "update": "Mise à jour | Mis à jour", + "user": "Utilisateur | Utilisateurs", + "value": "Valeur", + "village": "Village", + "week": "Semaine | Hebdomadaire", + "yes": "Oui", + "yesterday": "Hier" + } } diff --git a/Website/ui/src/assets/sass/_variables.scss b/Website/ui/src/assets/sass/_variables.scss index 30fdaa2c5..1a391ae2b 100644 --- a/Website/ui/src/assets/sass/_variables.scss +++ b/Website/ui/src/assets/sass/_variables.scss @@ -2,6 +2,6 @@ $body-bg: #f5f8fa; // Typography -$font-family-sans-serif: 'Raleway', sans-serif; +$font-family-sans-serif: "Raleway", sans-serif; $font-size-base: 0.9rem; $line-height-base: 1.6; diff --git a/Website/ui/src/assets/sass/app.scss b/Website/ui/src/assets/sass/app.scss index fc145ff0b..0cba11d60 100644 --- a/Website/ui/src/assets/sass/app.scss +++ b/Website/ui/src/assets/sass/app.scss @@ -1,7 +1,7 @@ .notification-content { - font-size: 1.3rem !important; + font-size: 1.3rem !important; } .dd { - max-width: 100% !important; + max-width: 100% !important; } diff --git a/Website/ui/src/assets/sass/mpm.scss b/Website/ui/src/assets/sass/mpm.scss index b913f1d06..323c5b48b 100644 --- a/Website/ui/src/assets/sass/mpm.scss +++ b/Website/ui/src/assets/sass/mpm.scss @@ -11,10 +11,10 @@ // ========================================================= // // * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -@import 'mpm/variables'; -@import 'mpm/mixins'; -@import 'mpm/shadows'; -@import 'mpm/sidebar-and-main-panel'; -@import 'mpm/misc'; -@import 'mpm/navbars'; -@import 'mpm/responsive'; +@import "mpm/variables"; +@import "mpm/mixins"; +@import "mpm/shadows"; +@import "mpm/sidebar-and-main-panel"; +@import "mpm/misc"; +@import "mpm/navbars"; +@import "mpm/responsive"; diff --git a/Website/ui/src/assets/sass/mpm/_colors.scss b/Website/ui/src/assets/sass/mpm/_colors.scss index 8091ea8d1..b0be80c8e 100644 --- a/Website/ui/src/assets/sass/mpm/_colors.scss +++ b/Website/ui/src/assets/sass/mpm/_colors.scss @@ -1,21 +1,21 @@ -@import '~vue-material/dist/theme/engine'; // Import the theme engine +@import "~vue-material/dist/theme/engine"; // Import the theme engine @include md-register-theme( - 'selection-black', - ( - accent: md-get-palette-color(black, 500), - ) + "selection-black", + ( + accent: md-get-palette-color(black, 500), + ) ); @include md-register-theme( - 'default', - ( - primary: md-get-palette-color(blue, 500), - // The primary color of your application - ) + "default", + ( + primary: md-get-palette-color(blue, 500), + // The primary color of your application + ) ); -@import '~vue-material/dist/theme/all'; // Apply the theme +@import "~vue-material/dist/theme/all"; // Apply the theme $red-50: #ffebee !default; $red-100: #ffcdd2 !default; @@ -295,7 +295,7 @@ $grey-200: #eeeeee !default; $grey-300: #e0e0e0 !default; $grey-400: #bdbdbd !default; $grey-500: #9e9e9e; -$rgb-grey-500: '158, 158, 158' !default; +$rgb-grey-500: "158, 158, 158" !default; $grey-600: #757575 !default; $grey-700: #616161 !default; $grey-800: #424242 !default; @@ -323,6 +323,6 @@ $blue-grey-A700: #455a64 !default; $blue-grey: $blue-grey-500 !default; $black: #000000; -$rgb-black: '0,0,0' !default; +$rgb-black: "0,0,0" !default; $white: #ffffff; -$rgb-white: '255,255,255' !default; +$rgb-white: "255,255,255" !default; diff --git a/Website/ui/src/assets/sass/mpm/_footers.scss b/Website/ui/src/assets/sass/mpm/_footers.scss index 99de0611b..bf2a0141a 100644 --- a/Website/ui/src/assets/sass/mpm/_footers.scss +++ b/Website/ui/src/assets/sass/mpm/_footers.scss @@ -1,56 +1,56 @@ footer { - padding: $padding-base 0; - - nav, - .copyright { - display: inline-block; - } - - ul { - padding: 0; - margin: 0; - list-style: none; - - li { - display: inline-block; - - a { - color: inherit !important; - padding: $padding-base; - font-weight: $font-weight-bold; - font-size: $mdb-btn-font-size-base; - text-transform: uppercase; - border-radius: $border-radius-base; - text-decoration: none; - position: relative; - display: block; - - &:hover { - text-decoration: none; - } - } + padding: $padding-base 0; + + nav, + .copyright { + display: inline-block; + } + + ul { + padding: 0; + margin: 0; + list-style: none; + + li { + display: inline-block; + + a { + color: inherit !important; + padding: $padding-base; + font-weight: $font-weight-bold; + font-size: $mdb-btn-font-size-base; + text-transform: uppercase; + border-radius: $border-radius-base; + text-decoration: none; + position: relative; + display: block; + + &:hover { + text-decoration: none; } + } } - - .copyright { - padding: 15px 0; - margin: 0; - .material-icons { - font-size: 18px; - position: relative; - top: 3px; - } + } + + .copyright { + padding: 15px 0; + margin: 0; + .material-icons { + font-size: 18px; + position: relative; + top: 3px; } + } - .btn { - margin-top: 0; - margin-bottom: 0; - } + .btn { + margin-top: 0; + margin-bottom: 0; + } } .container { - padding-right: 30px; - padding-left: 30px; - display: flex; - justify-content: space-between; + padding-right: 30px; + padding-left: 30px; + display: flex; + justify-content: space-between; } diff --git a/Website/ui/src/assets/sass/mpm/_misc.scss b/Website/ui/src/assets/sass/mpm/_misc.scss index 036f9311d..ffe902d00 100644 --- a/Website/ui/src/assets/sass/mpm/_misc.scss +++ b/Website/ui/src/assets/sass/mpm/_misc.scss @@ -1,43 +1,43 @@ body { - letter-spacing: unset; - // background: #fdfdfe; - color: $black-color; - - &.inverse { - background: #333333; - - &, - .form-control { - color: $mdb-text-color-light; - } - - .modal, - .panel-default, - .card { - &, - .form-control { - background-color: initial; - color: initial; - } - } + letter-spacing: unset; + // background: #fdfdfe; + color: $black-color; + + &.inverse { + background: #333333; + + &, + .form-control { + color: $mdb-text-color-light; + } + + .modal, + .panel-default, + .card { + &, + .form-control { + background-color: initial; + color: initial; + } } + } } .wrapper { - &.wrapper-full-page { - height: auto; - min-height: 100vh; - } + &.wrapper-full-page { + height: auto; + min-height: 100vh; + } } blockquote { - p { - font-style: italic; - } + p { + font-style: italic; + } } .life-of-material-dashboard { - background: #ffffff; + background: #ffffff; } body, @@ -51,90 +51,90 @@ h6, .h2, .h3, .h4 { - font-family: $font-family-sans-serif; - font-weight: 300; - line-height: 1.5em; + font-family: $font-family-sans-serif; + font-weight: 300; + line-height: 1.5em; } .serif-font { - font-family: $font-family-serif; + font-family: $font-family-serif; } .page-header { - height: 60vh; - background-position: center center; - background-size: cover; - margin: 0; - padding: 0; - border: 0; - border-bottom-left-radius: 6px; - border-bottom-right-radius: 6px; + height: 60vh; + background-position: center center; + background-size: cover; + margin: 0; + padding: 0; + border: 0; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; } a { - color: $link-color; + color: $link-color; + + &:hover, + &:focus { + color: darken($link-color, 5%) !important; + text-decoration: none !important; + } + &.text-info { &:hover, &:focus { - color: darken($link-color, 5%) !important; - text-decoration: none !important; + color: darken($brand-info, 5%); } + } - &.text-info { - &:hover, - &:focus { - color: darken($brand-info, 5%); - } - } - - & .material-icons { - vertical-align: middle; - } + & .material-icons { + vertical-align: middle; + } } -a[data-toggle='collapse'][aria-expanded='true'] .caret { - @include rotate-180(); +a[data-toggle="collapse"][aria-expanded="true"] .caret { + @include rotate-180(); } .sidebar .nav a, .caret, .sidebar .dropdown .dropdown-menu li a { - @include transition($fast-transition-time, $transition-ease-in); + @include transition($fast-transition-time, $transition-ease-in); } /* Animations */ .animation-transition-general { - @include transition($general-transition-time, $transition-linear); + @include transition($general-transition-time, $transition-linear); } .animation-transition-slow { - @include transition($slow-transition-time, $transition-linear); + @include transition($slow-transition-time, $transition-linear); } .animation-transition-fast { - @include transition($fast-transition-time, $transition-ease); + @include transition($fast-transition-time, $transition-ease); } legend { - border-bottom: 0; + border-bottom: 0; } .pull-left { - float: left; + float: left; } .pull-right { - float: right; + float: right; } // Prevent highlight on mobile * { - -webkit-tap-highlight-color: rgba(255, 255, 255, 0); - -webkit-tap-highlight-color: transparent; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + -webkit-tap-highlight-color: transparent; - &:focus { - outline: 0; - } + &:focus { + outline: 0; + } } a:focus, @@ -143,34 +143,34 @@ button:active, button:focus, button:hover, button::-moz-focus-inner, -input[type='reset']::-moz-focus-inner, -input[type='button']::-moz-focus-inner, -input[type='submit']::-moz-focus-inner, +input[type="reset"]::-moz-focus-inner, +input[type="button"]::-moz-focus-inner, +input[type="submit"]::-moz-focus-inner, select::-moz-focus-inner, -input[type='file'] > input[type='button']::-moz-focus-inner { - outline: 0 !important; +input[type="file"] > input[type="button"]::-moz-focus-inner { + outline: 0 !important; } .text-center { - text-align: center; + text-align: center; } .text-left { - text-align: left; + text-align: left; } .text-right { - text-align: right; + text-align: right; } .places-buttons { - .md-button { - width: 30%; - margin-left: 10px; - margin-right: 10px; - } + .md-button { + width: 30%; + margin-left: 10px; + margin-right: 10px; + } } .md-theme-default :not(input):not(textarea)::selection { - background-color: #c8c8c8 !important; + background-color: #c8c8c8 !important; } diff --git a/Website/ui/src/assets/sass/mpm/_mixins.scss b/Website/ui/src/assets/sass/mpm/_mixins.scss index 2764bbf1f..2e48f6ab8 100644 --- a/Website/ui/src/assets/sass/mpm/_mixins.scss +++ b/Website/ui/src/assets/sass/mpm/_mixins.scss @@ -1,261 +1,305 @@ //Utilities -@import 'mixins/transparency'; -@import 'mixins/vendor-prefixes'; +@import "mixins/transparency"; +@import "mixins/vendor-prefixes"; // Placeholder text @mixin material-placeholder() { - &::-moz-placeholder { - @content; - } - // Firefox - &:-ms-input-placeholder { - @content; - } - // Internet Explorer 10+ - &::-webkit-input-placeholder { - @content; - } - // Safari and Chrome + &::-moz-placeholder { + @content; + } + // Firefox + &:-ms-input-placeholder { + @content; + } + // Internet Explorer 10+ + &::-webkit-input-placeholder { + @content; + } + // Safari and Chrome } @mixin toolbar-colors($variation-color) { - background-color: $variation-color !important; - @include shadow-big-color($variation-color); + background-color: $variation-color !important; + @include shadow-big-color($variation-color); + + .md-title, + .md-list .md-list-item-content, + .md-toolbar-toggle .icon-bar, + &, + &:hover, + &:focus { + color: $white-color !important; + } +} - .md-title, - .md-list .md-list-item-content, - .md-toolbar-toggle .icon-bar, - &, - &:hover, - &:focus { +@mixin dropdown-colors($variation-color) { + .dropdown-menu { + border-radius: $border-radius-base !important; + + li > a { + &:hover, + &:focus { color: $white-color !important; + background-color: $variation-color !important; + @include shadow-big-color($variation-color); + } } -} -@mixin dropdown-colors($variation-color) { - .dropdown-menu { - border-radius: $border-radius-base !important; - - li > a { - &:hover, - &:focus { - color: $white-color !important; - background-color: $variation-color !important; - @include shadow-big-color($variation-color); - } - } - - .active > a { - &:hover, - &:focus { - color: $white-color !important; - } - - background-color: $variation-color !important; - color: $white-color !important; - @include shadow-big-color($variation-color); - } + .active > a { + &:hover, + &:focus { + color: $white-color !important; + } + + background-color: $variation-color !important; + color: $white-color !important; + @include shadow-big-color($variation-color); } + } } @mixin alert-color($color) { - background-color: $color; - color: $white-color; - border-radius: $border-radius-base; - @include shadow-big-color($color); + background-color: $color; + color: $white-color; + border-radius: $border-radius-base; + @include shadow-big-color($color); } @mixin transition($time, $type) { - -webkit-transition: all $time $type; - -moz-transition: all $time $type; - -o-transition: all $time $type; - -ms-transition: all $time $type; - transition: all $time $type; + -webkit-transition: all $time $type; + -moz-transition: all $time $type; + -o-transition: all $time $type; + -ms-transition: all $time $type; + transition: all $time $type; } @mixin transform-scale($value) { - -webkit-transform: scale($value); - -moz-transform: scale($value); - -o-transform: scale($value); - -ms-transform: scale($value); - transform: scale($value); + -webkit-transform: scale($value); + -moz-transform: scale($value); + -o-transform: scale($value); + -ms-transform: scale($value); + transform: scale($value); } @mixin transform-scale3d($value) { - -webkit-transform: scale3d($value); - -moz-transform: scale3d($value); - -o-transform: scale3d($value); - -ms-transform: scale3d($value); - transform: scale3d($value); + -webkit-transform: scale3d($value); + -moz-transform: scale3d($value); + -o-transform: scale3d($value); + -ms-transform: scale3d($value); + transform: scale3d($value); } @mixin transform-translate-x($value) { - -webkit-transform: translate3d($value, 0, 0); - -moz-transform: translate3d($value, 0, 0); - -o-transform: translate3d($value, 0, 0); - -ms-transform: translate3d($value, 0, 0); - transform: translate3d($value, 0, 0); + -webkit-transform: translate3d($value, 0, 0); + -moz-transform: translate3d($value, 0, 0); + -o-transform: translate3d($value, 0, 0); + -ms-transform: translate3d($value, 0, 0); + transform: translate3d($value, 0, 0); } @mixin transform-translate-y($value) { - -webkit-transform: translate3d(0, $value, 0); - -moz-transform: translate3d(0, $value, 0); - -o-transform: translate3d(0, $value, 0); - -ms-transform: translate3d(0, $value, 0); - transform: translate3d(0, $value, 0); + -webkit-transform: translate3d(0, $value, 0); + -moz-transform: translate3d(0, $value, 0); + -o-transform: translate3d(0, $value, 0); + -ms-transform: translate3d(0, $value, 0); + transform: translate3d(0, $value, 0); } @mixin transform-origin($coordinates) { - -webkit-transform-origin: $coordinates; - -moz-transform-origin: $coordinates; - -o-transform-origin: $coordinates; - -ms-transform-origin: $coordinates; - transform-origin: $coordinates; + -webkit-transform-origin: $coordinates; + -moz-transform-origin: $coordinates; + -o-transform-origin: $coordinates; + -ms-transform-origin: $coordinates; + transform-origin: $coordinates; } @mixin black-filter() { - background: rgba(0, 0, 0, 0.55); - position: absolute; - width: 100%; - height: 100%; - content: ''; - z-index: 0; - left: 0; - top: 0; + background: rgba(0, 0, 0, 0.55); + position: absolute; + width: 100%; + height: 100%; + content: ""; + z-index: 0; + left: 0; + top: 0; } @mixin animation($value) { - -webkit-animation: $value; - -moz-animation: $value; - -o-animation: $value; - -ms-animation: $value; - animation: $value; + -webkit-animation: $value; + -moz-animation: $value; + -o-animation: $value; + -ms-animation: $value; + animation: $value; } @mixin radial-gradient($extern-color, $center-color) { - background: $extern-color; - background: -moz-radial-gradient( - center, - ellipse cover, - $center-color 0%, - $extern-color 100% - ); /* FF3.6+ */ - background: -webkit-gradient( - radial, - center center, - 0px, - center center, - 100%, - color-stop(0%, $center-color), - color-stop(100%, $extern-color) - ); /* Chrome,Safari4+ */ - background: -webkit-radial-gradient( - center, - ellipse cover, - $center-color 0%, - $extern-color 100% - ); /* Chrome10+,Safari5.1+ */ - background: -o-radial-gradient( - center, - ellipse cover, - $center-color 0%, - $extern-color 100% - ); /* Opera 12+ */ - background: -ms-radial-gradient( - center, - ellipse cover, - $center-color 0%, - $extern-color 100% - ); /* IE10+ */ - background: radial-gradient( - ellipse at center, - $center-color 0%, - $extern-color 100% - ); /* W3C */ - background-size: 550% 450%; + background: $extern-color; + background: -moz-radial-gradient( + center, + ellipse cover, + $center-color 0%, + $extern-color 100% + ); /* FF3.6+ */ + background: -webkit-gradient( + radial, + center center, + 0px, + center center, + 100%, + color-stop(0%, $center-color), + color-stop(100%, $extern-color) + ); /* Chrome,Safari4+ */ + background: -webkit-radial-gradient( + center, + ellipse cover, + $center-color 0%, + $extern-color 100% + ); /* Chrome10+,Safari5.1+ */ + background: -o-radial-gradient( + center, + ellipse cover, + $center-color 0%, + $extern-color 100% + ); /* Opera 12+ */ + background: -ms-radial-gradient( + center, + ellipse cover, + $center-color 0%, + $extern-color 100% + ); /* IE10+ */ + background: radial-gradient( + ellipse at center, + $center-color 0%, + $extern-color 100% + ); /* W3C */ + background-size: 550% 450%; } @mixin tag-color($color) { - .tag { - background-color: $color; - color: $white-color; + .tag { + background-color: $color; + color: $white-color; - .tagsinput-remove-link { - color: $white-color; - } - } - .tagsinput-add { - color: $color; + .tagsinput-remove-link { + color: $white-color; } + } + .tagsinput-add { + color: $color; + } } @mixin create-colored-tags() { - &.tag-primary { - @include tag-color($brand-primary); - } - &.tag-info { - @include tag-color($brand-info); - } - &.tag-success { - @include tag-color($brand-success); - } - &.tag-warning { - @include tag-color($brand-warning); - } - &.tag-danger { - @include tag-color($brand-danger); - } - &.tag-rose { - @include tag-color($brand-rose); - } + &.tag-primary { + @include tag-color($brand-primary); + } + &.tag-info { + @include tag-color($brand-info); + } + &.tag-success { + @include tag-color($brand-success); + } + &.tag-warning { + @include tag-color($brand-warning); + } + &.tag-danger { + @include tag-color($brand-danger); + } + &.tag-rose { + @include tag-color($brand-rose); + } } @mixin rotate-180() { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); } @mixin rotate() { - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -o-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } @mixin linear-gradient($color1, $color2) { - background: $color1; /* For browsers that do not support gradients */ - background: -webkit-linear-gradient( - 60deg, - $color1, - $color2 - ); /* For Safari 5.1 to 6.0 */ - background: -o-linear-gradient( - 60deg, - $color1, - $color2 - ); /* For Opera 11.1 to 12.0 */ - background: -moz-linear-gradient( - 60deg, - $color1, - $color2 - ); /* For Firefox 3.6 to 15 */ - background: linear-gradient(60deg, $color1, $color2); /* Standard syntax */ + background: $color1; /* For browsers that do not support gradients */ + background: -webkit-linear-gradient( + 60deg, + $color1, + $color2 + ); /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient( + 60deg, + $color1, + $color2 + ); /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient( + 60deg, + $color1, + $color2 + ); /* For Firefox 3.6 to 15 */ + background: linear-gradient(60deg, $color1, $color2); /* Standard syntax */ } // Mixins for buttons @mixin btn-styles($btn-color) { - // remove this line if you want black shadows + // remove this line if you want black shadows + @include shadow-2dp-color($btn-color); + + &.md-raised { @include shadow-2dp-color($btn-color); + } + + &, + &:hover, + &:focus, + &:active, + &.active, + &:active:focus, + &:active:hover, + &.active:focus, + &.active:hover, + .open > &.dropdown-toggle, + .open > &.dropdown-toggle:focus, + .open > &.dropdown-toggle:hover { + background-color: $btn-color !important; + color: $white-color !important; + + i { + color: $white-color !important; + } + } - &.md-raised { - @include shadow-2dp-color($btn-color); + &:focus, + &:active, + &:hover { + // remove this line if you want black shadows + @include button-shadow-color($btn-color); + background-color: darken($btn-color, 3%) !important; + } + + &.disabled, + &:disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &.focus, + &:active, + &.active { + opacity: 0.65; + pointer-events: none; } + } + &.md-simple { &, &:hover, &:focus, @@ -264,102 +308,58 @@ &:active:focus, &:active:hover, &.active:focus, - &.active:hover, - .open > &.dropdown-toggle, - .open > &.dropdown-toggle:focus, - .open > &.dropdown-toggle:hover { - background-color: $btn-color !important; - color: $white-color !important; - - i { - color: $white-color !important; - } - } - - &:focus, - &:active, - &:hover { - // remove this line if you want black shadows - @include button-shadow-color($btn-color); - background-color: darken($btn-color, 3%) !important; - } - - &.disabled, - &:disabled, - &[disabled], - fieldset[disabled] & { - &, - &:hover, - &:focus, - &.focus, - &:active, - &.active { - opacity: 0.65; - pointer-events: none; - } - } + &.active:hover { + background-color: transparent !important; + color: $btn-color !important; + box-shadow: none; - &.md-simple { - &, - &:hover, - &:focus, - &:active, - &.active, - &:active:focus, - &:active:hover, - &.active:focus, - &.active:hover { - background-color: transparent !important; - color: $btn-color !important; - box-shadow: none; - - i { - color: $btn-color !important; - } - } + i { + color: $btn-color !important; + } } + } } @mixin set-background-color-button($color) { - .nav { - .md-list-item-container.active { - background-color: $color !important; - @include shadow-big-color($color); - } + .nav { + .md-list-item-container.active { + background-color: $color !important; + @include shadow-big-color($color); } + } } // for social buttons @mixin social-buttons-color($color) { + background-color: $color !important; + color: #fff; + @include shadow-2dp-color($color); + + &:hover, + &:focus, + &:active, + &.active, + &:active:focus, + &:active:hover, + &.active:focus, + &.active:hover { background-color: $color !important; color: #fff; - @include shadow-2dp-color($color); - - &:hover, - &:focus, - &:active, - &.active, - &:active:focus, - &:active:hover, - &.active:focus, - &.active:hover { - background-color: $color !important; - color: #fff; - @include button-shadow-color($color); - } - - &.btn-simple { - color: $color; - background-color: transparent; - box-shadow: none; - } + @include button-shadow-color($color); + } + + &.btn-simple { + color: $color; + background-color: transparent; + box-shadow: none; + } } @mixin social-buttons() { - &.md-facebook { - @include social-buttons-color($social-facebook); - } - &.md-twitter { - @include social-buttons-color($social-twitter); - } + &.md-facebook { + @include social-buttons-color($social-facebook); + } + &.md-twitter { + @include social-buttons-color($social-twitter); + } } diff --git a/Website/ui/src/assets/sass/mpm/_navbars.scss b/Website/ui/src/assets/sass/mpm/_navbars.scss index c62cce1d1..76da0777d 100644 --- a/Website/ui/src/assets/sass/mpm/_navbars.scss +++ b/Website/ui/src/assets/sass/mpm/_navbars.scss @@ -272,53 +272,53 @@ */ .md-menu-content { - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); - border-radius: $border-radius-base !important; - overflow: hidden; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); + border-radius: $border-radius-base !important; + overflow: hidden; - .md-list .md-list-item a { - font-size: 10px; - } + .md-list .md-list-item a { + font-size: 10px; + } } .md-list-item a { - color: inherit !important; - padding-top: 15px; - padding-bottom: 15px; - - font-weight: $font-weight-default; - font-size: $mdb-btn-font-size-base; - text-transform: uppercase; - overflow: visible; - - border-radius: $border-radius-base; - position: relative; - display: block; - padding: 0; - text-decoration: none; - - &:hover, - &:focus { - color: inherit; - background-color: transparent; - } - - .material-icons, + color: inherit !important; + padding-top: 15px; + padding-bottom: 15px; + + font-weight: $font-weight-default; + font-size: $mdb-btn-font-size-base; + text-transform: uppercase; + overflow: visible; + + border-radius: $border-radius-base; + position: relative; + display: block; + padding: 0; + text-decoration: none; + + &:hover, + &:focus { + color: inherit; + background-color: transparent; + } + + .material-icons, + .fa { + font-size: 20px; + } + + &.btn:not(.btn-just-icon) { .fa { - font-size: 20px; - } - - &.btn:not(.btn-just-icon) { - .fa { - position: relative; - top: 2px; - margin-top: -4px; - margin-right: 4px; - } + position: relative; + top: 2px; + margin-top: -4px; + margin-right: 4px; } + } } .md-list-item { - margin-left: 5px; - list-style: none; + margin-left: 5px; + list-style: none; } diff --git a/Website/ui/src/assets/sass/mpm/_responsive.scss b/Website/ui/src/assets/sass/mpm/_responsive.scss index 66225d2aa..7e929894f 100644 --- a/Website/ui/src/assets/sass/mpm/_responsive.scss +++ b/Website/ui/src/assets/sass/mpm/_responsive.scss @@ -1,581 +1,581 @@ @media (min-width: 992px) { + .navbar-form { + margin-top: 21px; + margin-bottom: 21px; + padding-left: 5px; + padding-right: 5px; + } + + .md-toolbar-toggle { + display: none; + } + + .navbar-nav.navbar-right > li > .dropdown-menu:before { + left: auto; + right: 12px; + } + + .navbar-nav.navbar-right > li > .dropdown-menu:after { + left: auto; + right: 12px; + } + + .footer:not(.footer-big) { + nav > ul { + li:first-child { + margin-left: 0; + } + } + } + + body > .navbar-collapse.collapse { + display: none !important; + } + + .card { + form { + [class*="col-"] { + padding: 6px; + } + [class*="col-"]:first-child { + padding-left: 15px; + } + [class*="col-"]:last-child { + padding-right: 15px; + } + } + } + + .wrapper .sidebar { .navbar-form { - margin-top: 21px; - margin-bottom: 21px; - padding-left: 5px; - padding-right: 5px; + display: none !important; } - - .md-toolbar-toggle { - display: none; - } - - .navbar-nav.navbar-right > li > .dropdown-menu:before { - left: auto; - right: 12px; - } - - .navbar-nav.navbar-right > li > .dropdown-menu:after { - left: auto; - right: 12px; - } - - .footer:not(.footer-big) { - nav > ul { - li:first-child { - margin-left: 0; - } - } - } - - body > .navbar-collapse.collapse { - display: none !important; - } - - .card { - form { - [class*='col-'] { - padding: 6px; - } - [class*='col-']:first-child { - padding-left: 15px; - } - [class*='col-']:last-child { - padding-right: 15px; - } - } - } - - .wrapper .sidebar { - .navbar-form { - display: none !important; - } - .nav-mobile-menu { - display: none; - } + .nav-mobile-menu { + display: none; } + } } /* Changes for small display */ @media (max-width: 991px) { - .md-toolbar .md-collapse { - display: none !important; - } - - .main-panel > .content { - padding-left: 0; - padding-right: 0; - } - - .wrapper .sidebar { - display: none; - box-shadow: none; - - .sidebar-wrapper { - padding-bottom: 60px; - } - - .nav-mobile-menu { - margin-top: 0; - - .md-field { - width: auto; - margin: 10px 36px 0; - } - - .notification { - float: left; - line-height: 30px; - margin-right: 8px; - } - } - - .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - display: none; - -webkit-box-shadow: none; - box-shadow: none; - } - - .dropdown.open .dropdown-menu { - display: block; - } - - .dropdown { - li:hover a { - background-color: $brand-primary; - @include shadow-8dp(); - color: $white-color !important; - } - } - } - - html, - body { - overflow-x: hidden; - } - - .menu-on-left { - .nav-open & { - .main-panel, - .wrapper-full-page, - .navbar-fixed > div { - @include transform-translate-x(-220px); - } - } - - .main-panel { - position: initial; - } - - .wrapper .sidebar, - .wrapper .off-canvas-sidebar { - right: 0; - left: auto; - @include transform-translate-x(220px); - } - - #bodyClick { - right: 220px; - left: auto; - } - } + .md-toolbar .md-collapse { + display: none !important; + } - .main-panel { - width: 100%; - } - .navbar-transparent { - padding-top: 15px; - background-color: rgba(0, 0, 0, 0.45); - } - body, - html { - position: relative; - overflow-x: hidden; - } - .navbar .container { - right: 0; - width: 100%; - @include transition(0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1)); - position: relative; - } - .navbar .navbar-collapse.collapse, - .navbar .navbar-collapse.collapse.in, - .navbar .navbar-collapse.collapsing { - display: none !important; - } + .main-panel > .content { + padding-left: 0; + padding-right: 0; + } - .navbar-nav > li { - float: none; - position: relative; - display: block; - } + .wrapper .sidebar { + display: none; + box-shadow: none; - .wrapper .sidebar, - .wrapper .off-canvas-sidebar { - position: fixed; - display: block; - top: 0; - height: 100vh; - width: 220px; - left: 0; - right: auto; - z-index: 1032; - visibility: visible; - background-color: #9a9a9a; - overflow-y: visible; - border-top: none; - text-align: left; - padding-right: 0px; - padding-left: 0; - - @include transform-translate-x(-220px); - @include transition(0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1)); - > ul { - position: relative; - z-index: 4; - overflow-y: scroll; - height: calc(100vh - 61px); - width: 100%; - } - &::before { - top: 0; - left: 0; - height: 100%; - width: 100%; - position: absolute; - display: block; - content: ''; - z-index: 1; - } - - .logo { - position: relative; - z-index: 4; - } - - .navbar-form { - margin: 10px 15px; - float: none !important; - padding-top: 1px; - padding-bottom: 1px; - } - - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-x: scroll; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - -webkit-overflow-scrolling: touch; - } + .sidebar-wrapper { + padding-bottom: 60px; } - .form-group { - .form-control { - font-size: 16px; - height: 37px; - } - } + .nav-mobile-menu { + margin-top: 0; - .navbar-form { - .btn { - position: absolute; - top: 27px; - right: 15px; - } - } + .md-field { + width: auto; + margin: 10px 36px 0; + } - .nav-open .navbar-collapse { - @include transform-translate-x(0px); - } - .nav-open .navbar .container { - left: -250px; - } - .nav-open .main-panel { - right: 0; - @include transform-translate-x(220px); + .notification { + float: left; + line-height: 30px; + margin-right: 8px; + } } - .nav-open .sidebar { - @include shadow-big(); + .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + display: none; + -webkit-box-shadow: none; + box-shadow: none; + } + + .dropdown.open .dropdown-menu { + display: block; + } + + .dropdown { + li:hover a { + background-color: $brand-primary; + @include shadow-8dp(); + color: $white-color !important; + } + } + } + + html, + body { + overflow-x: hidden; + } + + .menu-on-left { + .nav-open & { + .main-panel, + .wrapper-full-page, + .navbar-fixed > div { + @include transform-translate-x(-220px); + } } - .nav-open { - .off-canvas-sidebar, - .sidebar { - @include transform-translate-x(0); - } + .main-panel { + position: initial; } - .close-layer { - height: 100%; - width: 100%; - position: absolute; - opacity: 0; - top: 0; - right: auto; - - content: ''; - z-index: 9999; - overflow-x: hidden; - - @include transition($slow-transition-time, $transition-ease-in); - - &.visible { - opacity: 1; - } - } - - .navbar-toggle .icon-bar { - display: block; - position: relative; - background: #fff; - width: 24px; - height: 2px; - border-radius: 1px; - margin: 0 auto; - } - - .navbar-header .navbar-toggle { - margin: 10px 15px 10px 0; - width: 40px; - height: 40px; - } - .bar1, - .bar2, - .bar3 { - outline: 1px solid transparent; - } - - @include topbar-x-rotation(); - @include topbar-back-rotation(); - @include bottombar-x-rotation(); - @include bottombar-back-rotation(); - - .md-toolbar-toggle { - .icon-bar:nth-child(2) { - top: 0px; - @include bar-animation($topbar-back); - } - .icon-bar:nth-child(3) { - opacity: 1; - } - .icon-bar:nth-child(4) { - bottom: 0px; - @include bar-animation($bottombar-back); - } - - &.toggled { - .icon-bar:nth-child(1) { - top: 6px; - @include bar-animation($topbar-x); - } - .icon-bar:nth-child(2) { - opacity: 0; - } - .icon-bar:nth-child(3) { - bottom: 6px; - @include bar-animation($bottombar-x); - } - } - } - - @-webkit-keyframes fadeIn { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - @-moz-keyframes fadeIn { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - @keyframes fadeIn { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - - .dropdown-menu .divider { - background-color: rgba(229, 229, 229, 0.15); - } - - .navbar-nav { - margin: 1px 0; - - .open .dropdown-menu > li { - & > a { - padding: 15px 15px 5px 50px; - } - - &:first-child > a { - padding: 5px 15px 5px 50px; - } - - &:last-child > a { - padding: 15px 15px 25px 50px; - } - } - } - - [class*='navbar-'] .navbar-nav { - & > li > a, - > li > a:hover, - > li > a:focus, - .active > a, - .active > a:hover, - .active > a:focus, - .open .dropdown-menu > li > a, - .open .dropdown-menu > li > a:hover, - .open .dropdown-menu > li > a:focus, - .navbar-nav .open .dropdown-menu > li > a:active { - color: white; - } - - & > li > a, - > li > a:hover, - > li > a:focus, - .open .dropdown-menu > li > a, - .open .dropdown-menu > li > a:hover, - .open .dropdown-menu > li > a:focus { - opacity: 0.7; - background: transparent; - } - - &.navbar-nav .open .dropdown-menu > li > a:active { - opacity: 1; - } - - & .dropdown > a { - &:hover .caret { - border-bottom-color: #777; - border-top-color: #777; - } - &:active .caret { - border-bottom-color: white; - border-top-color: white; - } - } + .wrapper .sidebar, + .wrapper .off-canvas-sidebar { + right: 0; + left: auto; + @include transform-translate-x(220px); } - .dropdown-menu { - display: none; - } - .navbar-fixed-top { - -webkit-backface-visibility: hidden; - } #bodyClick { - height: 100%; - width: 100%; - position: fixed; - opacity: 0; - top: 0; - left: auto; - right: 220px; - content: ''; - z-index: 9999; - overflow-x: hidden; - } - - .social-line .btn { - margin: $margin-bottom; - } - .subscribe-line .form-control { - margin: $margin-bottom; - } - .social-line.pull-right { - float: none; - } - .footer:not(.footer-big) nav > ul li { - float: none; - } - .social-area.pull-right { - float: none !important; - } - .form-control + .form-control-feedback { - margin-top: -8px; - } - .navbar-toggle:hover, - .navbar-toggle:focus { - background-color: transparent !important; - } - .btn.dropdown-toggle { - margin-bottom: 0; - } - .media-post .author { - width: 20%; - float: none !important; - display: block; - margin: 0 auto 10px; - } - .media-post .media-body { - width: 100%; + right: 220px; + left: auto; + } + } + + .main-panel { + width: 100%; + } + .navbar-transparent { + padding-top: 15px; + background-color: rgba(0, 0, 0, 0.45); + } + body, + html { + position: relative; + overflow-x: hidden; + } + .navbar .container { + right: 0; + width: 100%; + @include transition(0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1)); + position: relative; + } + .navbar .navbar-collapse.collapse, + .navbar .navbar-collapse.collapse.in, + .navbar .navbar-collapse.collapsing { + display: none !important; + } + + .navbar-nav > li { + float: none; + position: relative; + display: block; + } + + .wrapper .sidebar, + .wrapper .off-canvas-sidebar { + position: fixed; + display: block; + top: 0; + height: 100vh; + width: 220px; + left: 0; + right: auto; + z-index: 1032; + visibility: visible; + background-color: #9a9a9a; + overflow-y: visible; + border-top: none; + text-align: left; + padding-right: 0px; + padding-left: 0; + + @include transform-translate-x(-220px); + @include transition(0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1)); + > ul { + position: relative; + z-index: 4; + overflow-y: scroll; + height: calc(100vh - 61px); + width: 100%; + } + &::before { + top: 0; + left: 0; + height: 100%; + width: 100%; + position: absolute; + display: block; + content: ""; + z-index: 1; + } + + .logo { + position: relative; + z-index: 4; } - .navbar-collapse.collapse { - height: 100% !important; - } - .navbar-collapse.collapse.in { - display: block; - } - .navbar-header .collapse, - .navbar-toggle { - display: block !important; - } - .navbar-header { - float: none; + .navbar-form { + margin: 10px 15px; + float: none !important; + padding-top: 1px; + padding-bottom: 1px; } - .navbar-collapse { - .nav p { - font-size: $font-size-base; - margin: 0; - } - [class^='pe-7s-'] { - float: left; - font-size: 20px; - margin-right: 10px; - } - } + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + -webkit-overflow-scrolling: touch; + } + } + + .form-group { + .form-control { + font-size: 16px; + height: 37px; + } + } + + .navbar-form { + .btn { + position: absolute; + top: 27px; + right: 15px; + } + } + + .nav-open .navbar-collapse { + @include transform-translate-x(0px); + } + .nav-open .navbar .container { + left: -250px; + } + .nav-open .main-panel { + right: 0; + @include transform-translate-x(220px); + } + + .nav-open .sidebar { + @include shadow-big(); + } + + .nav-open { + .off-canvas-sidebar, + .sidebar { + @include transform-translate-x(0); + } + } + + .close-layer { + height: 100%; + width: 100%; + position: absolute; + opacity: 0; + top: 0; + right: auto; + + content: ""; + z-index: 9999; + overflow-x: hidden; + + @include transition($slow-transition-time, $transition-ease-in); + + &.visible { + opacity: 1; + } + } + + .navbar-toggle .icon-bar { + display: block; + position: relative; + background: #fff; + width: 24px; + height: 2px; + border-radius: 1px; + margin: 0 auto; + } + + .navbar-header .navbar-toggle { + margin: 10px 15px 10px 0; + width: 40px; + height: 40px; + } + .bar1, + .bar2, + .bar3 { + outline: 1px solid transparent; + } + + @include topbar-x-rotation(); + @include topbar-back-rotation(); + @include bottombar-x-rotation(); + @include bottombar-back-rotation(); + + .md-toolbar-toggle { + .icon-bar:nth-child(2) { + top: 0px; + @include bar-animation($topbar-back); + } + .icon-bar:nth-child(3) { + opacity: 1; + } + .icon-bar:nth-child(4) { + bottom: 0px; + @include bar-animation($bottombar-back); + } + + &.toggled { + .icon-bar:nth-child(1) { + top: 6px; + @include bar-animation($topbar-x); + } + .icon-bar:nth-child(2) { + opacity: 0; + } + .icon-bar:nth-child(3) { + bottom: 6px; + @include bar-animation($bottombar-x); + } + } + } + + @-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @-moz-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + + .dropdown-menu .divider { + background-color: rgba(229, 229, 229, 0.15); + } + + .navbar-nav { + margin: 1px 0; + + .open .dropdown-menu > li { + & > a { + padding: 15px 15px 5px 50px; + } + + &:first-child > a { + padding: 5px 15px 5px 50px; + } + + &:last-child > a { + padding: 15px 15px 25px 50px; + } + } + } + + [class*="navbar-"] .navbar-nav { + & > li > a, + > li > a:hover, + > li > a:focus, + .active > a, + .active > a:hover, + .active > a:focus, + .open .dropdown-menu > li > a, + .open .dropdown-menu > li > a:hover, + .open .dropdown-menu > li > a:focus, + .navbar-nav .open .dropdown-menu > li > a:active { + color: white; + } + + & > li > a, + > li > a:hover, + > li > a:focus, + .open .dropdown-menu > li > a, + .open .dropdown-menu > li > a:hover, + .open .dropdown-menu > li > a:focus { + opacity: 0.7; + background: transparent; + } + + &.navbar-nav .open .dropdown-menu > li > a:active { + opacity: 1; + } + + & .dropdown > a { + &:hover .caret { + border-bottom-color: #777; + border-top-color: #777; + } + &:active .caret { + border-bottom-color: white; + border-top-color: white; + } + } + } + + .dropdown-menu { + display: none; + } + .navbar-fixed-top { + -webkit-backface-visibility: hidden; + } + #bodyClick { + height: 100%; + width: 100%; + position: fixed; + opacity: 0; + top: 0; + left: auto; + right: 220px; + content: ""; + z-index: 9999; + overflow-x: hidden; + } + + .social-line .btn { + margin: $margin-bottom; + } + .subscribe-line .form-control { + margin: $margin-bottom; + } + .social-line.pull-right { + float: none; + } + .footer:not(.footer-big) nav > ul li { + float: none; + } + .social-area.pull-right { + float: none !important; + } + .form-control + .form-control-feedback { + margin-top: -8px; + } + .navbar-toggle:hover, + .navbar-toggle:focus { + background-color: transparent !important; + } + .btn.dropdown-toggle { + margin-bottom: 0; + } + .media-post .author { + width: 20%; + float: none !important; + display: block; + margin: 0 auto 10px; + } + .media-post .media-body { + width: 100%; + } + + .navbar-collapse.collapse { + height: 100% !important; + } + .navbar-collapse.collapse.in { + display: block; + } + .navbar-header .collapse, + .navbar-toggle { + display: block !important; + } + .navbar-header { + float: none; + } + .navbar-collapse { + .nav p { + font-size: $font-size-base; + margin: 0; + } + + [class^="pe-7s-"] { + float: left; + font-size: 20px; + margin-right: 10px; + } + } } @media (max-width: 768px) { - .footer .container { - justify-content: unset; - display: block; + .footer .container { + justify-content: unset; + display: block; - nav { - display: block; - } - - .copyright { - float: right; - } + nav { + display: block; } - .hidden-sm { - display: none !important; + .copyright { + float: right; } + } + + .hidden-sm { + display: none !important; + } } @media (min-width: 768px) { - .hidden-lg, - .hidden-md { - display: none !important; - } + .hidden-lg, + .hidden-md { + display: none !important; + } } @media screen and (min-width: 768px) { - .block-md { - display: block !important; - } + .block-md { + display: block !important; + } } @media (max-width: 480px), (max-width: 767px) { - .form-group { - .form-control { - width: 83%; - } + .form-group { + .form-control { + width: 83%; } + } - .navbar-form { - .form-group { - margin-bottom: 0; - } + .navbar-form { + .form-group { + margin-bottom: 0; } + } } @media (min-width: 992px) { - .table-full-width { - margin-left: -20px; - margin-right: -20px; - } - .table-responsive { - overflow: visible; - } + .table-full-width { + margin-left: -20px; + margin-right: -20px; + } + .table-responsive { + overflow: visible; + } } @media screen and (max-width: 576px) { - .tim-typo { - padding-left: 11% !important; + .tim-typo { + padding-left: 11% !important; - .tim-note { - bottom: -25px !important; - } + .tim-note { + bottom: -25px !important; } + } } diff --git a/Website/ui/src/assets/sass/mpm/_shadows.scss b/Website/ui/src/assets/sass/mpm/_shadows.scss index 059bd2716..1b87eddee 100644 --- a/Website/ui/src/assets/sass/mpm/_shadows.scss +++ b/Website/ui/src/assets/sass/mpm/_shadows.scss @@ -1,147 +1,147 @@ // This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten. @mixin shadow-z-1() { - box-shadow: - 0 1px 6px 0 rgba(0, 0, 0, 0.12), - 0 1px 6px 0 rgba(0, 0, 0, 0.12); + box-shadow: + 0 1px 6px 0 rgba(0, 0, 0, 0.12), + 0 1px 6px 0 rgba(0, 0, 0, 0.12); } @mixin shadow-z-1-hover() { - box-shadow: - 0 5px 11px 0 rgba(0, 0, 0, 0.18), - 0 4px 15px 0 rgba(0, 0, 0, 0.15); + box-shadow: + 0 5px 11px 0 rgba(0, 0, 0, 0.18), + 0 4px 15px 0 rgba(0, 0, 0, 0.15); } @mixin shadow-z-2() { - box-shadow: - 0 8px 17px 0 rgba(0, 0, 0, 0.2), - 0 6px 20px 0 rgba(0, 0, 0, 0.19); + box-shadow: + 0 8px 17px 0 rgba(0, 0, 0, 0.2), + 0 6px 20px 0 rgba(0, 0, 0, 0.19); } @mixin shadow-z-3() { - box-shadow: - 0 12px 15px 0 rgba(0, 0, 0, 0.24), - 0 17px 50px 0 rgba(0, 0, 0, 0.19); + box-shadow: + 0 12px 15px 0 rgba(0, 0, 0, 0.24), + 0 17px 50px 0 rgba(0, 0, 0, 0.19); } @mixin shadow-z-4() { - box-shadow: - 0 16px 28px 0 rgba(0, 0, 0, 0.22), - 0 25px 55px 0 rgba(0, 0, 0, 0.21); + box-shadow: + 0 16px 28px 0 rgba(0, 0, 0, 0.22), + 0 25px 55px 0 rgba(0, 0, 0, 0.21); } @mixin shadow-z-5() { - box-shadow: - 0 27px 24px 0 rgba(0, 0, 0, 0.2), - 0 40px 77px 0 rgba(0, 0, 0, 0.22); + box-shadow: + 0 27px 24px 0 rgba(0, 0, 0, 0.2), + 0 40px 77px 0 rgba(0, 0, 0, 0.22); } /* Shadows (from mdl http://www.getmdl.io/) */ // Focus shadow mixin. @mixin big-shadow() { - box-shadow: - 0 0 8px rgba(0, 0, 0, 0.18), - 0 8px 16px rgba(0, 0, 0, 0.36); + box-shadow: + 0 0 8px rgba(0, 0, 0, 0.18), + 0 8px 16px rgba(0, 0, 0, 0.36); } @mixin button-shadow-color($color) { - box-shadow: - 0 14px 26px -12px rgba($color, $mdb-shadow-key-penumbra-opacity * 3), - 0 4px 23px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 8px 10px -5px rgba($color, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 14px 26px -12px rgba($color, $mdb-shadow-key-penumbra-opacity * 3), + 0 4px 23px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 8px 10px -5px rgba($color, $mdb-shadow-key-umbra-opacity); } @mixin shadow-2dp() { - box-shadow: - 0 2px 2px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), - 0 3px 1px -2px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity), - 0 1px 5px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity); + box-shadow: + 0 2px 2px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), + 0 3px 1px -2px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity), + 0 1px 5px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity); } @mixin shadow-2dp-color($color) { - box-shadow: - 0 2px 2px 0 rgba($color, $mdb-shadow-key-penumbra-opacity), - 0 3px 1px -2px rgba($color, $mdb-shadow-key-umbra-opacity), - 0 1px 5px 0 rgba($color, $mdb-shadow-ambient-shadow-opacity); + box-shadow: + 0 2px 2px 0 rgba($color, $mdb-shadow-key-penumbra-opacity), + 0 3px 1px -2px rgba($color, $mdb-shadow-key-umbra-opacity), + 0 1px 5px 0 rgba($color, $mdb-shadow-ambient-shadow-opacity); } @mixin shadow-3dp() { - box-shadow: - 0 3px 4px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), - 0 3px 3px -2px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity), - 0 1px 8px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity); + box-shadow: + 0 3px 4px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), + 0 3px 3px -2px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity), + 0 1px 8px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity); } @mixin shadow-4dp() { - box-shadow: - 0 4px 5px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), - 0 1px 10px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 2px 4px -1px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 4px 5px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), + 0 1px 10px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 2px 4px -1px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); } @mixin shadow-4dp-color($color) { - box-shadow: - 0 4px 5px 0 rgba($color, $mdb-shadow-key-penumbra-opacity), - 0 1px 10px 0 rgba($color, $mdb-shadow-ambient-shadow-opacity), - 0 2px 4px -1px rgba($color, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 4px 5px 0 rgba($color, $mdb-shadow-key-penumbra-opacity), + 0 1px 10px 0 rgba($color, $mdb-shadow-ambient-shadow-opacity), + 0 2px 4px -1px rgba($color, $mdb-shadow-key-umbra-opacity); } @mixin shadow-6dp() { - box-shadow: - 0 6px 10px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), - 0 1px 18px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 3px 5px -1px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 6px 10px 0 rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), + 0 1px 18px 0 rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 3px 5px -1px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); } @mixin shadow-8dp() { - box-shadow: - 0 8px 10px 1px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), - 0 3px 14px 2px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 5px 5px -3px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 8px 10px 1px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), + 0 3px 14px 2px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 5px 5px -3px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); } @mixin shadow-8dp-color($color) { - box-shadow: - 0 8px 10px 1px rgba($color, $mdb-shadow-key-penumbra-opacity), - 0 3px 14px 2px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 5px 5px -3px rgba($color, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 8px 10px 1px rgba($color, $mdb-shadow-key-penumbra-opacity), + 0 3px 14px 2px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 5px 5px -3px rgba($color, $mdb-shadow-key-umbra-opacity); } @mixin shadow-16dp() { - box-shadow: - 0 16px 24px 2px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), - 0 6px 30px 5px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 16px 24px 2px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), + 0 6px 30px 5px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); } @mixin shadow-16dp-color($color) { - box-shadow: - 0 16px 24px 2px rgba($color, $mdb-shadow-key-penumbra-opacity), - 0 6px 30px 5px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 8px 10px -5px rgba($color, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 16px 24px 2px rgba($color, $mdb-shadow-key-penumbra-opacity), + 0 6px 30px 5px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 8px 10px -5px rgba($color, $mdb-shadow-key-umbra-opacity); } @mixin shadow-24dp() { - box-shadow: - 0 9px 46px 8px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), - 0 11px 15px -7px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 24px 38px 3px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 9px 46px 8px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity), + 0 11px 15px -7px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 24px 38px 3px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); } @mixin shadow-big() { - box-shadow: - 0 10px 30px -12px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity * 3), - 0 4px 25px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 10px 30px -12px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity * 3), + 0 4px 25px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); } @mixin shadow-big-navbar() { - box-shadow: - 0 10px 20px -12px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity * 3), - 0 3px 20px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 10px 20px -12px rgba(0, 0, 0, $mdb-shadow-key-penumbra-opacity * 3), + 0 3px 20px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 8px 10px -5px rgba(0, 0, 0, $mdb-shadow-key-umbra-opacity); } @mixin shadow-big-color($color) { - box-shadow: - 0 12px 20px -10px rgba($color, $mdb-shadow-key-penumbra-opacity * 2), - 0 4px 20px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), - 0 7px 8px -5px rgba($color, $mdb-shadow-key-umbra-opacity); + box-shadow: + 0 12px 20px -10px rgba($color, $mdb-shadow-key-penumbra-opacity * 2), + 0 4px 20px 0px rgba(0, 0, 0, $mdb-shadow-ambient-shadow-opacity), + 0 7px 8px -5px rgba($color, $mdb-shadow-key-umbra-opacity); } // shadow backup for Sketch/Photoshop diff --git a/Website/ui/src/assets/sass/mpm/_sidebar-and-main-panel.scss b/Website/ui/src/assets/sass/mpm/_sidebar-and-main-panel.scss index 942b640a5..3f052e7fd 100644 --- a/Website/ui/src/assets/sass/mpm/_sidebar-and-main-panel.scss +++ b/Website/ui/src/assets/sass/mpm/_sidebar-and-main-panel.scss @@ -1,334 +1,334 @@ .wrapper:after { - display: table; - clear: both; - content: ' '; + display: table; + clear: both; + content: " "; } .md-list-item { - .md-list-item-container { - .md-ripple { - padding: 10px 15px; - border-radius: $border-radius-base; - - > span { - border-radius: $border-radius-base; - } - } + .md-list-item-container { + .md-ripple { + padding: 10px 15px; + border-radius: $border-radius-base; + + > span { + border-radius: $border-radius-base; + } } + } } .wrapper .sidebar, .wrapper .off-canvas-sidebar { - overflow: scroll; - position: fixed; - top: 0; - bottom: 0; - left: 0; - z-index: 1; - @include shadow-big(); - background-size: cover; - background-position: center center; - @extend .animation-transition-general; - - .md-icon.md-theme-default.md-icon-font, - .material-icons { - color: #fff !important; - opacity: 0.8; + overflow: scroll; + position: fixed; + top: 0; + bottom: 0; + left: 0; + z-index: 1; + @include shadow-big(); + background-size: cover; + background-position: center center; + @extend .animation-transition-general; + + .md-icon.md-theme-default.md-icon-font, + .material-icons { + color: #fff !important; + opacity: 0.8; + } + + .md-list { + &.nav { + position: initial; } - .md-list { - &.nav { - position: initial; - } - - background-color: transparent !important; - - .md-list-item a { - text-transform: capitalize; - } - - .md-list-item-content { - justify-content: flex-start; - min-height: auto; - } + background-color: transparent !important; - & .md-list-item-container:hover { - background-color: rgba(200, 200, 200, 0.2) !important; - } + .md-list-item a { + text-transform: capitalize; } - .md-ripple span .md-ripple-wave { - background-color: rgba(200, 200, 200, 0.4) !important; + .md-list-item-content { + justify-content: flex-start; + min-height: auto; } - .sidebar-wrapper { - position: relative; - height: calc(100vh - 75px); - overflow: auto; - z-index: 4; - overflow-x: hidden; - - .dropdown .dropdown-backdrop { - display: none !important; - } + & .md-list-item-container:hover { + background-color: rgba(200, 200, 200, 0.2) !important; + } + } - .navbar-form { - border: none; - } + .md-ripple span .md-ripple-wave { + background-color: rgba(200, 200, 200, 0.4) !important; + } - .nav { - padding: 0; + .sidebar-wrapper { + position: relative; + height: calc(100vh - 75px); + overflow: auto; + z-index: 4; + overflow-x: hidden; - [data-toggle='collapse'] ~ div > ul > li > a { - padding-left: 60px; - } + .dropdown .dropdown-backdrop { + display: none !important; + } - .caret { - margin-top: 13px; - position: absolute; - right: 18px; - } - } + .navbar-form { + border: none; } - .logo-tim { - border-radius: 50%; - border: 1px solid #333; - display: block; - height: 61px; - width: 61px; - float: left; - overflow: hidden; + .nav { + padding: 0; - img { - width: 60px; - height: 60px; - } + [data-toggle="collapse"] ~ div > ul > li > a { + padding-left: 60px; + } + + .caret { + margin-top: 13px; + position: absolute; + right: 18px; + } } + } + + .logo-tim { + border-radius: 50%; + border: 1px solid #333; + display: block; + height: 61px; + width: 61px; + float: left; + overflow: hidden; + + img { + width: 60px; + height: 60px; + } + } - .nav { - margin-top: 20px; + .nav { + margin-top: 20px; - &.nav-mobile-menu { - li a { - padding: 10px 15px; - } - } + &.nav-mobile-menu { + li a { + padding: 10px 15px; + } + } - li { - a { - display: flex; - text-decoration: none; - margin: 10px 15px 0; - border-radius: $border-radius-base; - color: $white-color !important; - white-space: nowrap; - cursor: pointer; - width: auto; - } - - &:first-child > a { - margin: 0 15px; - } - - &:hover > a, - .dropdown:hover > a { - background: rgba(200, 200, 200, 0.2); - color: $black-color; - } - - .active { - color: #ffffff !important; - - .md-ripple i { - opacity: 1; - } - } + li { + a { + display: flex; + text-decoration: none; + margin: 10px 15px 0; + border-radius: $border-radius-base; + color: $white-color !important; + white-space: nowrap; + cursor: pointer; + width: auto; + } + + &:first-child > a { + margin: 0 15px; + } + + &:hover > a, + .dropdown:hover > a { + background: rgba(200, 200, 200, 0.2); + color: $black-color; + } + + .active { + color: #ffffff !important; + + .md-ripple i { + opacity: 1; } + } + } - .router-link-active p { - color: $white-color; - } + .router-link-active p { + color: $white-color; + } - p { - margin: 0; - line-height: 30px; - font-size: 14px; - position: relative; - display: block; - height: auto; - font-weight: $font-weight-light; - white-space: nowrap; - } + p { + margin: 0; + line-height: 30px; + font-size: 14px; + position: relative; + display: block; + height: auto; + font-weight: $font-weight-light; + white-space: nowrap; + } - i { - font-size: 24px !important; - float: left; - margin-right: 15px !important; - margin-left: 0; - line-height: 30px; - width: 30px; - text-align: center; - color: #a9afbb; - } + i { + font-size: 24px !important; + float: left; + margin-right: 15px !important; + margin-left: 0; + line-height: 30px; + width: 30px; + text-align: center; + color: #a9afbb; } + } - .logo { - position: relative; - padding: $padding-base 0; - z-index: 4; - - &:after { - content: ''; - position: absolute; - bottom: 0; - right: 15px; - height: 1px; - width: calc(100% - 30px); - background-color: rgba(180, 180, 180, 0.3); - } + .logo { + position: relative; + padding: $padding-base 0; + z-index: 4; - p { - float: left; - font-size: 20px; - margin: 10px 10px; - color: $white-color; - line-height: 20px; - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - } + &:after { + content: ""; + position: absolute; + bottom: 0; + right: 15px; + height: 1px; + width: calc(100% - 30px); + background-color: rgba(180, 180, 180, 0.3); + } - .logo-mini { - float: left; - width: 40px; - text-align: center; - margin-left: 25px; - margin-right: 11px; - position: relative; - top: -5px; - } + p { + float: left; + font-size: 20px; + margin: 10px 10px; + color: $white-color; + line-height: 20px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + } - .simple-text { - text-transform: uppercase; - padding: $padding-small-vertical $padding-zero; - display: block; - font-size: $font-size-large; - font-weight: $font-weight-default; - line-height: 30px; - text-decoration: none; - - &, - &:hover, - &:focus { - color: $white-color !important; - } - - .logo-img { - width: 40px; - display: inline-block; - height: 40px; - background: $white-color; - border-radius: 50%; - text-align: center; - overflow: hidden; - @include shadow-big(); - - img { - width: 55%; - vertical-align: -webkit-baseline-middle; - } - } - } + .logo-mini { + float: left; + width: 40px; + text-align: center; + margin-left: 25px; + margin-right: 11px; + position: relative; + top: -5px; } - .logo-tim { + .simple-text { + text-transform: uppercase; + padding: $padding-small-vertical $padding-zero; + display: block; + font-size: $font-size-large; + font-weight: $font-weight-default; + line-height: 30px; + text-decoration: none; + + &, + &:hover, + &:focus { + color: $white-color !important; + } + + .logo-img { + width: 40px; + display: inline-block; + height: 40px; + background: $white-color; border-radius: 50%; - border: 1px solid #333; - display: block; - height: 61px; - width: 61px; - float: left; + text-align: center; overflow: hidden; + @include shadow-big(); img { - width: 60px; - height: 60px; + width: 55%; + vertical-align: -webkit-baseline-middle; } + } } - - &:after { - display: block; - content: ''; - position: absolute; - width: 100%; - height: 100%; - /* background-color: rgba(27, 27, 27, 0.87);*/ - opacity: 0.85; - top: 0; - left: 0; - z-index: 2; + } + + .logo-tim { + border-radius: 50%; + border: 1px solid #333; + display: block; + height: 61px; + width: 61px; + float: left; + overflow: hidden; + + img { + width: 60px; + height: 60px; } + } + + &:after { + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + /* background-color: rgba(27, 27, 27, 0.87);*/ + opacity: 0.85; + top: 0; + left: 0; + z-index: 2; + } - &[data-color='blue'] { - @include set-background-color-button($brand-info); - } + &[data-color="blue"] { + @include set-background-color-button($brand-info); + } - &[data-color='green'] { - @include set-background-color-button($brand-success); - } + &[data-color="green"] { + @include set-background-color-button($brand-success); + } - &[data-color='orange'] { - @include set-background-color-button($brand-warning); - } + &[data-color="orange"] { + @include set-background-color-button($brand-warning); + } - &[data-color='red'] { - @include set-background-color-button($brand-danger); - } + &[data-color="red"] { + @include set-background-color-button($brand-danger); + } - &[data-color='purple'] { - @include set-background-color-button($brand-primary); - } + &[data-color="purple"] { + @include set-background-color-button($brand-primary); + } } .off-canvas-sidebar { - .nav { - > li > a, - > li > a:hover { - color: $white-color; - } + .nav { + > li > a, + > li > a:hover { + color: $white-color; + } - > li > a:focus { - background: rgba(200, 200, 200, 0.2); - } + > li > a:focus { + background: rgba(200, 200, 200, 0.2); } + } } .perfect-scrollbar-on { - .sidebar, - .main-panel { - height: 100%; - max-height: 100%; - } + .sidebar, + .main-panel { + height: 100%; + max-height: 100%; + } } .main-panel { - position: relative; - float: right; - width: $sidebar-width; - @include transition(0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1)); - - > .content { - padding: 1vh 0.5vw; - min-height: calc(100vh - 123px); - overflow-y: hidden; - } - - > .footer { - border-top: 1px solid #e7e7e7; - } - - > .navbar { - margin-bottom: 0; - } + position: relative; + float: right; + width: $sidebar-width; + @include transition(0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1)); + + > .content { + padding: 1vh 0.5vw; + min-height: calc(100vh - 123px); + overflow-y: hidden; + } + + > .footer { + border-top: 1px solid #e7e7e7; + } + + > .navbar { + margin-bottom: 0; + } } // .sidebar, diff --git a/Website/ui/src/assets/sass/mpm/_variables.scss b/Website/ui/src/assets/sass/mpm/_variables.scss index 638bbdbeb..6ce1c7ace 100644 --- a/Website/ui/src/assets/sass/mpm/_variables.scss +++ b/Website/ui/src/assets/sass/mpm/_variables.scss @@ -1,17 +1,17 @@ // This file has been autogenerated by grunt task lessToSass. Any changes will be overwritten. -@import '_colors'; +@import "_colors"; // Typography elements -$mdb-font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif !default; +$mdb-font-family: "Roboto", "Helvetica", "Arial", sans-serif !default; $mdb-text-color-light: $white !default; $mdb-text-color-light-hex: $white !default; // for contrast function in inverse -$mdb-text-color-primary: unquote('rgba(#{$rgb-black}, 0.87)') !default; +$mdb-text-color-primary: unquote("rgba(#{$rgb-black}, 0.87)") !default; $mdb-text-color-primary-hex: $black !default; // for contrast function in inverse $icon-color: rgba(0, 0, 0, 0.5) !default; -$mdb-label-color: unquote('rgba(#{$rgb-black}, 0.26)') !default; -$mdb-label-color-toggle-focus: unquote('rgba(#{$rgb-black}, .54)') !default; +$mdb-label-color: unquote("rgba(#{$rgb-black}, 0.26)") !default; +$mdb-label-color-toggle-focus: unquote("rgba(#{$rgb-black}, .54)") !default; //--- // Converted bs variables @@ -38,8 +38,8 @@ $border-radius-label: 12px !default; $border-radius-extreme: 30px !default; // Typography -$font-family-sans-serif: 'Roboto', 'Helvetica', 'Arial', sans-serif !default; -$font-family-serif: 'Roboto Slab', 'Times New Roman', serif !default; +$font-family-sans-serif: "Roboto", "Helvetica", "Arial", sans-serif !default; +$font-family-serif: "Roboto Slab", "Times New Roman", serif !default; $headings-font-weight: 300 !default; @@ -97,10 +97,10 @@ $link-hover-decoration: underline !default; // //## Font, line-height, and color for body text, headings, and more. -$font-family-sans-serif: 'Helvetica Neue', Helvetica, Arial, sans-serif !default; -$font-family-serif: Georgia, 'Times New Roman', Times, serif !default; +$font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif !default; +$font-family-serif: Georgia, "Times New Roman", Times, serif !default; //** Default monospace fonts for ``, ``, and `
`.
-$font-family-monospace: Menlo, Monaco, Consolas, 'Courier New', monospace !default;
+$font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace !default;
 $font-family-base: $font-family-sans-serif !default;
 
 $font-size-base: 14px !default;
@@ -121,7 +121,7 @@ $font-size-small: 12px !default;
 $line-height-base: 1.428571429 !default; // 20/14
 //** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
 $line-height-computed: floor(
-    ($font-size-base * $line-height-base)
+  ($font-size-base * $line-height-base)
 ) !default; // ~20px
 
 //** By default, this inherits from the ``.
@@ -139,15 +139,15 @@ $headings-color: inherit !default;
 // [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
 // [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
 $icon-font-path: if(
-    $bootstrap-sass-asset-helper,
-    'bootstrap/',
-    '../fonts/bootstrap/'
+  $bootstrap-sass-asset-helper,
+  "bootstrap/",
+  "../fonts/bootstrap/"
 ) !default;
 
 //** File name for all font files.
-$icon-font-name: 'glyphicons-halflings-regular' !default;
+$icon-font-name: "glyphicons-halflings-regular" !default;
 //** Element ID within SVG icon file.
-$icon-font-svg-id: 'glyphicons_halflingsregular' !default;
+$icon-font-svg-id: "glyphicons_halflingsregular" !default;
 
 //== Components
 //
@@ -273,17 +273,17 @@ $input-color-placeholder: #999 !default;
 
 //** Default `.form-control` height
 $input-height-base: (
-    $line-height-computed + ($padding-base-vertical * 2) + 2
+  $line-height-computed + ($padding-base-vertical * 2) + 2
 ) !default;
 //** Large `.form-control` height
 $input-height-large: (
-    ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) +
-        2
+  ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) +
+    2
 ) !default;
 //** Small `.form-control` height
 $input-height-small: (
-    floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) +
-        2
+  floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) +
+    2
 ) !default;
 
 //** `.form-group` margin
@@ -430,7 +430,7 @@ $navbar-margin-bottom: $line-height-computed !default;
 $navbar-border-radius: $border-radius-base !default;
 $navbar-padding-horizontal: floor(calc($grid-gutter-width / 2)) !default;
 $navbar-padding-vertical: calc(
-    ($navbar-height - $line-height-computed) / 2
+  ($navbar-height - $line-height-computed) / 2
 ) !default;
 $navbar-collapse-max-height: 340px !default;
 
@@ -450,8 +450,8 @@ $navbar-default-link-disabled-bg: transparent !default;
 // Navbar brand label
 $navbar-default-brand-color: $navbar-default-link-color !default;
 $navbar-default-brand-hover-color: darken(
-    $navbar-default-brand-color,
-    10%
+  $navbar-default-brand-color,
+  10%
 ) !default;
 $navbar-default-brand-hover-bg: transparent !default;
 
@@ -623,8 +623,8 @@ $popover-arrow-outer-width: ($popover-arrow-width + 1) !default;
 $popover-arrow-outer-color: fade_in($popover-border-color, 0.05) !default;
 //** Popover outer arrow fallback color
 $popover-arrow-outer-fallback-color: darken(
-    $popover-fallback-border-color,
-    20%
+  $popover-fallback-border-color,
+  20%
 ) !default;
 
 //== Labels
@@ -854,7 +854,7 @@ $breadcrumb-color: #ccc !default;
 //** Text color of current page in the breadcrumb
 $breadcrumb-active-color: $gray-light !default;
 //** Textual separator for between breadcrumb elements
-$breadcrumb-separator: '/' !default;
+$breadcrumb-separator: "/" !default;
 
 //== Carousel
 //
@@ -954,7 +954,7 @@ $mdb-input-font-size-small: ceil(($font-size-base * 0.75)) !default; // ~12px
 $mdb-input-line-height-base: $line-height-base; //1.428571429 !default; // 20/14
 //** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
 $mdb-input-line-height-computed: floor(
-    ($mdb-input-font-size-base * $mdb-input-line-height-base)
+  ($mdb-input-font-size-base * $mdb-input-line-height-base)
 ) !default; // ~20px
 $mdb-input-line-height-large: 1.3333333 !default; // extra decimals for Win 8.1 Chrome
 $mdb-input-line-height-small: 1.5 !default;
@@ -984,17 +984,17 @@ $mdb-input-border-radius-small: 0 !default;
 
 //** Default `.form-control` height
 $mdb-input-height-base: (
-    $mdb-input-line-height-computed + ($mdb-input-padding-base-vertical * 2) + 2
+  $mdb-input-line-height-computed + ($mdb-input-padding-base-vertical * 2) + 2
 ) !default;
 //** Large `.form-control` height
 $mdb-input-height-large: (
-    ceil($mdb-input-font-size-large * $mdb-input-line-height-large) +
-        ($mdb-input-padding-large-vertical * 2) + 2
+  ceil($mdb-input-font-size-large * $mdb-input-line-height-large) +
+    ($mdb-input-padding-large-vertical * 2) + 2
 ) !default;
 //** Small `.form-control` height
 $mdb-input-height-small: (
-    floor($mdb-input-font-size-small * $mdb-input-line-height-small) +
-        ($mdb-input-padding-small-vertical * 2) + 2
+  floor($mdb-input-font-size-small * $mdb-input-line-height-small) +
+    ($mdb-input-padding-small-vertical * 2) + 2
 ) !default;
 
 // Card
@@ -1054,8 +1054,8 @@ $mdb-shadow-key-penumbra-opacity: 0.14 !default;
 $mdb-shadow-ambient-shadow-opacity: 0.12 !default;
 
 $fancy-shadow:
-    0 13px 39px -10px rgba(0, 0, 0, 0.65),
-    0 1px 25px 0px rgba(0, 0, 0, 0.15);
+  0 13px 39px -10px rgba(0, 0, 0, 0.65),
+  0 1px 25px 0px rgba(0, 0, 0, 0.15);
 
 $general-transition-time: 300ms !default;
 
diff --git a/Website/ui/src/assets/sass/mpm/mixins/_chartist.scss b/Website/ui/src/assets/sass/mpm/mixins/_chartist.scss
index d4b294d8e..975e59ef2 100644
--- a/Website/ui/src/assets/sass/mpm/mixins/_chartist.scss
+++ b/Website/ui/src/assets/sass/mpm/mixins/_chartist.scss
@@ -1,41 +1,41 @@
 // Scales for responsive SVG containers
 $ct-scales: (
-    calc(1),
-    calc(15 / 16),
-    calc(8 / 9),
-    calc(5 / 6),
-    calc(4 / 5),
-    calc(3 / 4),
-    calc(2 / 3),
-    calc(5 / 8),
-    calc(1 / 1.618),
-    calc(3 / 5),
-    calc(9 / 16),
-    calc(8 / 15),
-    calc(1 / 2),
-    calc(2 / 5),
-    calc(3 / 8),
-    calc(1 / 3),
-    calc(1 / 4)
+  calc(1),
+  calc(15 / 16),
+  calc(8 / 9),
+  calc(5 / 6),
+  calc(4 / 5),
+  calc(3 / 4),
+  calc(2 / 3),
+  calc(5 / 8),
+  calc(1 / 1.618),
+  calc(3 / 5),
+  calc(9 / 16),
+  calc(8 / 15),
+  calc(1 / 2),
+  calc(2 / 5),
+  calc(3 / 8),
+  calc(1 / 3),
+  calc(1 / 4)
 ) !default;
 $ct-scales-names: (
-    ct-square,
-    ct-minor-second,
-    ct-major-second,
-    ct-minor-third,
-    ct-major-third,
-    ct-perfect-fourth,
-    ct-perfect-fifth,
-    ct-minor-sixth,
-    ct-golden-section,
-    ct-major-sixth,
-    ct-minor-seventh,
-    ct-major-seventh,
-    ct-octave,
-    ct-major-tenth,
-    ct-major-eleventh,
-    ct-major-twelfth,
-    ct-double-octave
+  ct-square,
+  ct-minor-second,
+  ct-major-second,
+  ct-minor-third,
+  ct-major-third,
+  ct-perfect-fourth,
+  ct-perfect-fifth,
+  ct-minor-sixth,
+  ct-golden-section,
+  ct-major-sixth,
+  ct-minor-seventh,
+  ct-major-seventh,
+  ct-octave,
+  ct-major-tenth,
+  ct-major-eleventh,
+  ct-major-twelfth,
+  ct-double-octave
 ) !default;
 
 // Class names to be used when generating CSS
@@ -70,7 +70,7 @@ $ct-text-justify: flex-start !default;
 $ct-text-line-height: 1;
 
 .ct-big-chart-white {
-    $ct-grid-color: rgba(250, 250, 250, 0.7) !default;
+  $ct-grid-color: rgba(250, 250, 250, 0.7) !default;
 }
 // Grid styles
 $ct-grid-color: rgba(0, 0, 0, 0.2) !default;
@@ -106,19 +106,19 @@ $ct-include-alternative-responsive-containers: $ct-include-classes !default;
 // Series names and colors. This can be extended or customized as desired. Just add more series and colors.
 $ct-series-names: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) !default;
 $ct-series-colors: (
-    $brand-info,
-    $brand-danger,
-    $brand-warning,
-    $brand-primary,
-    $brand-success,
-    $font-background-light-grey,
-    $gray-color,
-    $social-google,
-    $social-tumblr,
-    $social-youtube,
-    $social-twitter,
-    $social-pinterest,
-    $social-behance,
-    #6188e2,
-    #a748ca
+  $brand-info,
+  $brand-danger,
+  $brand-warning,
+  $brand-primary,
+  $brand-success,
+  $font-background-light-grey,
+  $gray-color,
+  $social-google,
+  $social-tumblr,
+  $social-youtube,
+  $social-twitter,
+  $social-pinterest,
+  $social-behance,
+  #6188e2,
+  #a748ca
 ) !default;
diff --git a/Website/ui/src/assets/sass/mpm/mixins/_transparency.scss b/Website/ui/src/assets/sass/mpm/mixins/_transparency.scss
index d8ba985bb..0b062e94a 100644
--- a/Website/ui/src/assets/sass/mpm/mixins/_transparency.scss
+++ b/Website/ui/src/assets/sass/mpm/mixins/_transparency.scss
@@ -1,20 +1,20 @@
 // Opacity
 
 @mixin opacity($opacity) {
-    opacity: $opacity;
-    // IE8 filter
-    $opacity-ie: ($opacity * 100);
-    filter: #{alpha(opacity=$opacity-ie)};
+  opacity: $opacity;
+  // IE8 filter
+  $opacity-ie: ($opacity * 100);
+  filter: #{alpha(opacity=$opacity-ie)};
 }
 
 @mixin black-filter($opacity) {
-    top: 0;
-    left: 0;
-    height: 100%;
-    width: 100%;
-    position: absolute;
-    background-color: rgba(17, 17, 17, $opacity);
-    display: block;
-    content: '';
-    z-index: 1;
+  top: 0;
+  left: 0;
+  height: 100%;
+  width: 100%;
+  position: absolute;
+  background-color: rgba(17, 17, 17, $opacity);
+  display: block;
+  content: "";
+  z-index: 1;
 }
diff --git a/Website/ui/src/assets/sass/mpm/mixins/_vendor-prefixes.scss b/Website/ui/src/assets/sass/mpm/mixins/_vendor-prefixes.scss
index 602b2bc5c..3f39391a7 100644
--- a/Website/ui/src/assets/sass/mpm/mixins/_vendor-prefixes.scss
+++ b/Website/ui/src/assets/sass/mpm/mixins/_vendor-prefixes.scss
@@ -2,325 +2,325 @@
 // For selecting text on the page
 
 @mixin user-select($select) {
-    -webkit-user-select: $select;
-    -moz-user-select: $select;
-    -ms-user-select: $select; // IE10+
-    user-select: $select;
+  -webkit-user-select: $select;
+  -moz-user-select: $select;
+  -ms-user-select: $select; // IE10+
+  user-select: $select;
 }
 
 @mixin box-shadow($shadow...) {
-    -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
-    box-shadow: $shadow;
+  -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
+  box-shadow: $shadow;
 }
 
 // Box sizing
 @mixin box-sizing($boxmodel) {
-    -webkit-box-sizing: $boxmodel;
-    -moz-box-sizing: $boxmodel;
-    box-sizing: $boxmodel;
+  -webkit-box-sizing: $boxmodel;
+  -moz-box-sizing: $boxmodel;
+  box-sizing: $boxmodel;
 }
 
 @mixin transition($time, $type) {
-    -webkit-transition: all $time $type;
-    -moz-transition: all $time $type;
-    -o-transition: all $time $type;
-    -ms-transition: all $time $type;
-    transition: all $time $type;
+  -webkit-transition: all $time $type;
+  -moz-transition: all $time $type;
+  -o-transition: all $time $type;
+  -ms-transition: all $time $type;
+  transition: all $time $type;
 }
 
 @mixin transform-scale($value) {
-    -webkit-transform: scale($value);
-    -moz-transform: scale($value);
-    -o-transform: scale($value);
-    -ms-transform: scale($value);
-    transform: scale($value);
+  -webkit-transform: scale($value);
+  -moz-transform: scale($value);
+  -o-transform: scale($value);
+  -ms-transform: scale($value);
+  transform: scale($value);
 }
 
 @mixin transform-translate-x($value) {
-    -webkit-transform: translate3d($value, 0, 0);
-    -moz-transform: translate3d($value, 0, 0);
-    -o-transform: translate3d($value, 0, 0);
-    -ms-transform: translate3d($value, 0, 0);
-    transform: translate3d($value, 0, 0);
+  -webkit-transform: translate3d($value, 0, 0);
+  -moz-transform: translate3d($value, 0, 0);
+  -o-transform: translate3d($value, 0, 0);
+  -ms-transform: translate3d($value, 0, 0);
+  transform: translate3d($value, 0, 0);
 }
 
 @mixin transform-origin($coordinates) {
-    -webkit-transform-origin: $coordinates;
-    -moz-transform-origin: $coordinates;
-    -o-transform-origin: $coordinates;
-    -ms-transform-origin: $coordinates;
-    transform-origin: $coordinates;
+  -webkit-transform-origin: $coordinates;
+  -moz-transform-origin: $coordinates;
+  -o-transform-origin: $coordinates;
+  -ms-transform-origin: $coordinates;
+  transform-origin: $coordinates;
 }
 
 @mixin radial-gradient($extern-color, $center-color) {
-    background: $extern-color;
-    background: -moz-radial-gradient(
-        center,
-        ellipse cover,
-        $center-color 0%,
-        $extern-color 100%
-    ); /* FF3.6+ */
-    background: -webkit-gradient(
-        radial,
-        center center,
-        0px,
-        center center,
-        100%,
-        color-stop(0%, $center-color),
-        color-stop(100%, $extern-color)
-    ); /* Chrome,Safari4+ */
-    background: -webkit-radial-gradient(
-        center,
-        ellipse cover,
-        $center-color 0%,
-        $extern-color 100%
-    ); /* Chrome10+,Safari5.1+ */
-    background: -o-radial-gradient(
-        center,
-        ellipse cover,
-        $center-color 0%,
-        $extern-color 100%
-    ); /* Opera 12+ */
-    background: -ms-radial-gradient(
-        center,
-        ellipse cover,
-        $center-color 0%,
-        $extern-color 100%
-    ); /* IE10+ */
-    background: radial-gradient(
-        ellipse at center,
-        $center-color 0%,
-        $extern-color 100%
-    ); /* W3C */
-    background-size: 550% 450%;
+  background: $extern-color;
+  background: -moz-radial-gradient(
+    center,
+    ellipse cover,
+    $center-color 0%,
+    $extern-color 100%
+  ); /* FF3.6+ */
+  background: -webkit-gradient(
+    radial,
+    center center,
+    0px,
+    center center,
+    100%,
+    color-stop(0%, $center-color),
+    color-stop(100%, $extern-color)
+  ); /* Chrome,Safari4+ */
+  background: -webkit-radial-gradient(
+    center,
+    ellipse cover,
+    $center-color 0%,
+    $extern-color 100%
+  ); /* Chrome10+,Safari5.1+ */
+  background: -o-radial-gradient(
+    center,
+    ellipse cover,
+    $center-color 0%,
+    $extern-color 100%
+  ); /* Opera 12+ */
+  background: -ms-radial-gradient(
+    center,
+    ellipse cover,
+    $center-color 0%,
+    $extern-color 100%
+  ); /* IE10+ */
+  background: radial-gradient(
+    ellipse at center,
+    $center-color 0%,
+    $extern-color 100%
+  ); /* W3C */
+  background-size: 550% 450%;
 }
 
 @mixin vertical-align {
-    position: relative;
-    top: 50%;
-    -webkit-transform: translateY(-50%);
-    -ms-transform: translateY(-50%);
-    transform: translateY(-50%);
+  position: relative;
+  top: 50%;
+  -webkit-transform: translateY(-50%);
+  -ms-transform: translateY(-50%);
+  transform: translateY(-50%);
 }
 
 @mixin rotate-180() {
-    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-    -webkit-transform: rotate(180deg);
-    -ms-transform: rotate(180deg);
-    transform: rotate(180deg);
+  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+  -webkit-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
 }
 
 @mixin bar-animation($type) {
-    -webkit-animation: $type 500ms linear 0s;
-    -moz-animation: $type 500ms linear 0s;
-    animation: $type 500ms 0s;
-    -webkit-animation-fill-mode: forwards;
-    -moz-animation-fill-mode: forwards;
-    animation-fill-mode: forwards;
+  -webkit-animation: $type 500ms linear 0s;
+  -moz-animation: $type 500ms linear 0s;
+  animation: $type 500ms 0s;
+  -webkit-animation-fill-mode: forwards;
+  -moz-animation-fill-mode: forwards;
+  animation-fill-mode: forwards;
 }
 
 @mixin topbar-x-rotation() {
-    @keyframes topbar-x {
-        0% {
-            top: 0px;
-            transform: rotate(0deg);
-        }
-        45% {
-            top: 6px;
-            transform: rotate(145deg);
-        }
-        75% {
-            transform: rotate(130deg);
-        }
-        100% {
-            transform: rotate(135deg);
-        }
-    }
-    @-webkit-keyframes topbar-x {
-        0% {
-            top: 0px;
-            -webkit-transform: rotate(0deg);
-        }
-        45% {
-            top: 6px;
-            -webkit-transform: rotate(145deg);
-        }
-        75% {
-            -webkit-transform: rotate(130deg);
-        }
-        100% {
-            -webkit-transform: rotate(135deg);
-        }
-    }
-    @-moz-keyframes topbar-x {
-        0% {
-            top: 0px;
-            -moz-transform: rotate(0deg);
-        }
-        45% {
-            top: 6px;
-            -moz-transform: rotate(145deg);
-        }
-        75% {
-            -moz-transform: rotate(130deg);
-        }
-        100% {
-            -moz-transform: rotate(135deg);
-        }
+  @keyframes topbar-x {
+    0% {
+      top: 0px;
+      transform: rotate(0deg);
     }
+    45% {
+      top: 6px;
+      transform: rotate(145deg);
+    }
+    75% {
+      transform: rotate(130deg);
+    }
+    100% {
+      transform: rotate(135deg);
+    }
+  }
+  @-webkit-keyframes topbar-x {
+    0% {
+      top: 0px;
+      -webkit-transform: rotate(0deg);
+    }
+    45% {
+      top: 6px;
+      -webkit-transform: rotate(145deg);
+    }
+    75% {
+      -webkit-transform: rotate(130deg);
+    }
+    100% {
+      -webkit-transform: rotate(135deg);
+    }
+  }
+  @-moz-keyframes topbar-x {
+    0% {
+      top: 0px;
+      -moz-transform: rotate(0deg);
+    }
+    45% {
+      top: 6px;
+      -moz-transform: rotate(145deg);
+    }
+    75% {
+      -moz-transform: rotate(130deg);
+    }
+    100% {
+      -moz-transform: rotate(135deg);
+    }
+  }
 }
 
 @mixin topbar-back-rotation() {
-    @keyframes topbar-back {
-        0% {
-            top: 6px;
-            transform: rotate(135deg);
-        }
-        45% {
-            transform: rotate(-10deg);
-        }
-        75% {
-            transform: rotate(5deg);
-        }
-        100% {
-            top: 0px;
-            transform: rotate(0);
-        }
+  @keyframes topbar-back {
+    0% {
+      top: 6px;
+      transform: rotate(135deg);
     }
+    45% {
+      transform: rotate(-10deg);
+    }
+    75% {
+      transform: rotate(5deg);
+    }
+    100% {
+      top: 0px;
+      transform: rotate(0);
+    }
+  }
 
-    @-webkit-keyframes topbar-back {
-        0% {
-            top: 6px;
-            -webkit-transform: rotate(135deg);
-        }
-        45% {
-            -webkit-transform: rotate(-10deg);
-        }
-        75% {
-            -webkit-transform: rotate(5deg);
-        }
-        100% {
-            top: 0px;
-            -webkit-transform: rotate(0);
-        }
+  @-webkit-keyframes topbar-back {
+    0% {
+      top: 6px;
+      -webkit-transform: rotate(135deg);
+    }
+    45% {
+      -webkit-transform: rotate(-10deg);
+    }
+    75% {
+      -webkit-transform: rotate(5deg);
     }
+    100% {
+      top: 0px;
+      -webkit-transform: rotate(0);
+    }
+  }
 
-    @-moz-keyframes topbar-back {
-        0% {
-            top: 6px;
-            -moz-transform: rotate(135deg);
-        }
-        45% {
-            -moz-transform: rotate(-10deg);
-        }
-        75% {
-            -moz-transform: rotate(5deg);
-        }
-        100% {
-            top: 0px;
-            -moz-transform: rotate(0);
-        }
+  @-moz-keyframes topbar-back {
+    0% {
+      top: 6px;
+      -moz-transform: rotate(135deg);
+    }
+    45% {
+      -moz-transform: rotate(-10deg);
+    }
+    75% {
+      -moz-transform: rotate(5deg);
     }
+    100% {
+      top: 0px;
+      -moz-transform: rotate(0);
+    }
+  }
 }
 
 @mixin bottombar-x-rotation() {
-    @keyframes bottombar-x {
-        0% {
-            bottom: 0px;
-            transform: rotate(0deg);
-        }
-        45% {
-            bottom: 6px;
-            transform: rotate(-145deg);
-        }
-        75% {
-            transform: rotate(-130deg);
-        }
-        100% {
-            transform: rotate(-135deg);
-        }
-    }
-    @-webkit-keyframes bottombar-x {
-        0% {
-            bottom: 0px;
-            -webkit-transform: rotate(0deg);
-        }
-        45% {
-            bottom: 6px;
-            -webkit-transform: rotate(-145deg);
-        }
-        75% {
-            -webkit-transform: rotate(-130deg);
-        }
-        100% {
-            -webkit-transform: rotate(-135deg);
-        }
-    }
-    @-moz-keyframes bottombar-x {
-        0% {
-            bottom: 0px;
-            -moz-transform: rotate(0deg);
-        }
-        45% {
-            bottom: 6px;
-            -moz-transform: rotate(-145deg);
-        }
-        75% {
-            -moz-transform: rotate(-130deg);
-        }
-        100% {
-            -moz-transform: rotate(-135deg);
-        }
+  @keyframes bottombar-x {
+    0% {
+      bottom: 0px;
+      transform: rotate(0deg);
+    }
+    45% {
+      bottom: 6px;
+      transform: rotate(-145deg);
     }
+    75% {
+      transform: rotate(-130deg);
+    }
+    100% {
+      transform: rotate(-135deg);
+    }
+  }
+  @-webkit-keyframes bottombar-x {
+    0% {
+      bottom: 0px;
+      -webkit-transform: rotate(0deg);
+    }
+    45% {
+      bottom: 6px;
+      -webkit-transform: rotate(-145deg);
+    }
+    75% {
+      -webkit-transform: rotate(-130deg);
+    }
+    100% {
+      -webkit-transform: rotate(-135deg);
+    }
+  }
+  @-moz-keyframes bottombar-x {
+    0% {
+      bottom: 0px;
+      -moz-transform: rotate(0deg);
+    }
+    45% {
+      bottom: 6px;
+      -moz-transform: rotate(-145deg);
+    }
+    75% {
+      -moz-transform: rotate(-130deg);
+    }
+    100% {
+      -moz-transform: rotate(-135deg);
+    }
+  }
 }
 
 @mixin bottombar-back-rotation {
-    @keyframes bottombar-back {
-        0% {
-            bottom: 6px;
-            transform: rotate(-135deg);
-        }
-        45% {
-            transform: rotate(10deg);
-        }
-        75% {
-            transform: rotate(-5deg);
-        }
-        100% {
-            bottom: 0px;
-            transform: rotate(0);
-        }
-    }
-    @-webkit-keyframes bottombar-back {
-        0% {
-            bottom: 6px;
-            -webkit-transform: rotate(-135deg);
-        }
-        45% {
-            -webkit-transform: rotate(10deg);
-        }
-        75% {
-            -webkit-transform: rotate(-5deg);
-        }
-        100% {
-            bottom: 0px;
-            -webkit-transform: rotate(0);
-        }
-    }
-    @-moz-keyframes bottombar-back {
-        0% {
-            bottom: 6px;
-            -moz-transform: rotate(-135deg);
-        }
-        45% {
-            -moz-transform: rotate(10deg);
-        }
-        75% {
-            -moz-transform: rotate(-5deg);
-        }
-        100% {
-            bottom: 0px;
-            -moz-transform: rotate(0);
-        }
+  @keyframes bottombar-back {
+    0% {
+      bottom: 6px;
+      transform: rotate(-135deg);
+    }
+    45% {
+      transform: rotate(10deg);
+    }
+    75% {
+      transform: rotate(-5deg);
+    }
+    100% {
+      bottom: 0px;
+      transform: rotate(0);
+    }
+  }
+  @-webkit-keyframes bottombar-back {
+    0% {
+      bottom: 6px;
+      -webkit-transform: rotate(-135deg);
+    }
+    45% {
+      -webkit-transform: rotate(10deg);
+    }
+    75% {
+      -webkit-transform: rotate(-5deg);
+    }
+    100% {
+      bottom: 0px;
+      -webkit-transform: rotate(0);
+    }
+  }
+  @-moz-keyframes bottombar-back {
+    0% {
+      bottom: 6px;
+      -moz-transform: rotate(-135deg);
+    }
+    45% {
+      -moz-transform: rotate(10deg);
+    }
+    75% {
+      -moz-transform: rotate(-5deg);
+    }
+    100% {
+      bottom: 0px;
+      -moz-transform: rotate(0);
     }
+  }
 }
diff --git a/Website/ui/src/bootstrap.js b/Website/ui/src/bootstrap.js
index 1087bb98c..09054bbb4 100644
--- a/Website/ui/src/bootstrap.js
+++ b/Website/ui/src/bootstrap.js
@@ -1,41 +1,41 @@
-window._ = require('lodash')
-window.Popper = require('popper.js').default
-import 'babel-polyfill'
+window._ = require("lodash")
+window.Popper = require("popper.js").default
+import "babel-polyfill"
 
-window.axios = require('axios')
-window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'
+window.axios = require("axios")
+window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"
 // Add a request interceptor
 window.axios.interceptors.request.use(
-    (config) => {
-        const token = localStorage.getItem('token')
-        if (token) {
-            config.headers['Authorization'] = 'Bearer ' + token
-        }
-        // config.headers['Content-Type'] = 'application/json';
-        return config
-    },
-    (error) => {
-        Promise.reject(error)
-    },
+  (config) => {
+    const token = localStorage.getItem("token")
+    if (token) {
+      config.headers["Authorization"] = "Bearer " + token
+    }
+    // config.headers['Content-Type'] = 'application/json';
+    return config
+  },
+  (error) => {
+    Promise.reject(error)
+  },
 )
 
-import { config } from './config'
+import { config } from "./config"
 
 Vue.prototype.appConfig = config
 
-import Vue from 'vue'
+import Vue from "vue"
 
 /**
  * Vue Router
  */
-import VueRouter from 'vue-router'
+import VueRouter from "vue-router"
 
 Vue.use(VueRouter)
 
 /**
  * Vuex
  */
-import Vuex from 'vuex'
+import Vuex from "vuex"
 
 Vue.use(Vuex)
 window.Vue = Vue
@@ -44,116 +44,116 @@ window.Vuex = Vuex
 /**
  * VeeValidate
  */
-import i18n from './i18n'
-import VeeValidate from 'vee-validate'
-import enMessages from 'vee-validate/dist/locale/en'
-import frMessages from 'vee-validate/dist/locale/fr'
+import i18n from "./i18n"
+import VeeValidate from "vee-validate"
+import enMessages from "vee-validate/dist/locale/en"
+import frMessages from "vee-validate/dist/locale/fr"
 
 Vue.use(VeeValidate, {
-    i18n,
-    dictionary: {
-        en: enMessages,
-        fr: frMessages,
-        bu: enMessages, // No burmese error messages available
-    },
+  i18n,
+  dictionary: {
+    en: enMessages,
+    fr: frMessages,
+    bu: enMessages, // No burmese error messages available
+  },
 })
 
 /**
  * VueGoogleCharts
  */
-import VueGoogleCharts from 'vue-google-charts'
+import VueGoogleCharts from "vue-google-charts"
 
 Vue.use(VueGoogleCharts)
 
 /**
  * moment
  */
-import moment from 'moment'
+import moment from "moment"
 
 window.moment = moment
 
 /**
  * Vue Notification
  */
-import Notifications from 'vue-notification'
+import Notifications from "vue-notification"
 
 Vue.use(Notifications)
 
 /**
  * Reources
  */
-import { resources } from './resources'
+import { resources } from "./resources"
 
 window.resources = resources
 
 /**
  * Pusher
  */
-window.Pusher = require('pusher-js')
+window.Pusher = require("pusher-js")
 
 /**
  * Sweet Alert
  */
-import VueSweetalert2 from 'vue-sweetalert2'
+import VueSweetalert2 from "vue-sweetalert2"
 
 Vue.use(VueSweetalert2)
 
 window.onclick = function (e) {
-    let target = e.target
-    if (target.localName === 'a' || target.localName === 'i') {
-        let className = target.getAttribute('class')
-        let validClassNames = [
-            'fa fa-compress',
-            'fa fa-expand',
-            'button-icon jarviswidget-fullscreen-btn',
-        ]
-        if (validClassNames.indexOf(className) > -1) {
-            window.dispatchEvent(new Event('resize'))
-        }
+  let target = e.target
+  if (target.localName === "a" || target.localName === "i") {
+    let className = target.getAttribute("class")
+    let validClassNames = [
+      "fa fa-compress",
+      "fa fa-expand",
+      "button-icon jarviswidget-fullscreen-btn",
+    ]
+    if (validClassNames.indexOf(className) > -1) {
+      window.dispatchEvent(new Event("resize"))
     }
+  }
 }
 
 /**
  * VueMaterial
  */
-import VueMaterial from 'vue-material'
-import 'vue-material/dist/vue-material.min.css'
-import 'vue-material/dist/theme/default.css' // This line here
+import VueMaterial from "vue-material"
+import "vue-material/dist/vue-material.min.css"
+import "vue-material/dist/theme/default.css" // This line here
 Vue.use(VueMaterial)
 
 /**
  * SidebarComponent
  */
-import SidebarComponent from '@/modules/Sidebar'
+import SidebarComponent from "@/modules/Sidebar"
 
 Vue.use(SidebarComponent)
 
 /**
  * Some SCSS
  */
-import '../src/assets/sass/mpm.scss'
+import "../src/assets/sass/mpm.scss"
 
 /**
  * Default Layout
  */
-import Default from './layouts/Default.vue'
+import Default from "./layouts/Default.vue"
 
-Vue.component('default-layout', Default)
+Vue.component("default-layout", Default)
 
 /**
  * VueTelInput
  */
 // FIXME: It's only used once. Should this really be a global import?
-import VueTelInput from 'vue-tel-input'
-import 'vue-tel-input/dist/vue-tel-input.css'
+import VueTelInput from "vue-tel-input"
+import "vue-tel-input/dist/vue-tel-input.css"
 
 const opt = {
-    dropdownOptions: {
-        disabledDialCode: false,
-        showSearchBox: true,
-    },
-    inputOptions: {
-        showDialCode: true,
-    },
+  dropdownOptions: {
+    disabledDialCode: false,
+    showSearchBox: true,
+  },
+  inputOptions: {
+    showDialCode: true,
+  },
 }
 Vue.use(VueTelInput, opt)
diff --git a/Website/ui/src/config.js b/Website/ui/src/config.js
index 1bccf4830..46774a729 100644
--- a/Website/ui/src/config.js
+++ b/Website/ui/src/config.js
@@ -1,7 +1,7 @@
 let config = {
-    currency: 'TZS',
-    mapStartingPoint: [-2.500381, 32.88906],
-    env: 'development',
+  currency: "TZS",
+  mapStartingPoint: [-2.500381, 32.88906],
+  env: "development",
 }
 
 export { config }
diff --git a/Website/ui/src/config_prod.js b/Website/ui/src/config_prod.js
index c32c2c07e..16239ae6e 100644
--- a/Website/ui/src/config_prod.js
+++ b/Website/ui/src/config_prod.js
@@ -1,7 +1,7 @@
 let config = {
-    currency: 'TZS',
-    mapStartingPoint: [-2.500381, 32.88906],
-    env: 'production',
+  currency: "TZS",
+  mapStartingPoint: [-2.500381, 32.88906],
+  env: "production",
 }
 
 export { config }
diff --git a/Website/ui/src/config_staging.js b/Website/ui/src/config_staging.js
index 2c2bc99f2..74d23c6fc 100644
--- a/Website/ui/src/config_staging.js
+++ b/Website/ui/src/config_staging.js
@@ -1,7 +1,7 @@
 let config = {
-    currency: 'TZS',
-    mapStartingPoint: [-2.500381, 32.88906],
-    env: 'demo',
+  currency: "TZS",
+  mapStartingPoint: [-2.500381, 32.88906],
+  env: "demo",
 }
 
 export { config }
diff --git a/Website/ui/src/i18n.js b/Website/ui/src/i18n.js
index c45e6d8e8..5b71ed824 100644
--- a/Website/ui/src/i18n.js
+++ b/Website/ui/src/i18n.js
@@ -1,18 +1,18 @@
-import en from '../src/assets/locales/en.json'
-import fr from '../src/assets/locales/fr.json'
-import bu from '../src/assets/locales/bu.json'
-import VueI18n from 'vue-i18n'
-import Vue from 'vue'
+import en from "../src/assets/locales/en.json"
+import fr from "../src/assets/locales/fr.json"
+import bu from "../src/assets/locales/bu.json"
+import VueI18n from "vue-i18n"
+import Vue from "vue"
 
 Vue.use(VueI18n)
 
 const i18n = new VueI18n({
-    locale: localStorage.getItem('lang') || 'en',
-    messages: {
-        en: en,
-        fr: fr,
-        bu: bu,
-    },
+  locale: localStorage.getItem("lang") || "en",
+  messages: {
+    en: en,
+    fr: fr,
+    bu: bu,
+  },
 })
 
 export default i18n
diff --git a/Website/ui/src/layouts/Default.vue b/Website/ui/src/layouts/Default.vue
index bd2b8052b..fbe8841c6 100644
--- a/Website/ui/src/layouts/Default.vue
+++ b/Website/ui/src/layouts/Default.vue
@@ -1,179 +1,175 @@
 
 
 
 
diff --git a/Website/ui/src/layouts/FooterBar.vue b/Website/ui/src/layouts/FooterBar.vue
index 296ef470b..d0b8b18ef 100644
--- a/Website/ui/src/layouts/FooterBar.vue
+++ b/Website/ui/src/layouts/FooterBar.vue
@@ -1,7 +1,7 @@
 
diff --git a/Website/ui/src/layouts/MobileTopNavbar.vue b/Website/ui/src/layouts/MobileTopNavbar.vue
index d6439cbc5..3900afbca 100644
--- a/Website/ui/src/layouts/MobileTopNavbar.vue
+++ b/Website/ui/src/layouts/MobileTopNavbar.vue
@@ -1,224 +1,189 @@
 
 
 
 
 
diff --git a/Website/ui/src/layouts/NavBar.vue b/Website/ui/src/layouts/NavBar.vue
index 973178526..b645b8dd0 100644
--- a/Website/ui/src/layouts/NavBar.vue
+++ b/Website/ui/src/layouts/NavBar.vue
@@ -1,323 +1,310 @@
 
 
 
 
 
diff --git a/Website/ui/src/layouts/TopNavbar.vue b/Website/ui/src/layouts/TopNavbar.vue
index 100ffc4a9..5f6e6fc11 100644
--- a/Website/ui/src/layouts/TopNavbar.vue
+++ b/Website/ui/src/layouts/TopNavbar.vue
@@ -1,187 +1,150 @@
 
 
 
 
 
diff --git a/Website/ui/src/main.js b/Website/ui/src/main.js
index c5d406ccd..175355387 100644
--- a/Website/ui/src/main.js
+++ b/Website/ui/src/main.js
@@ -4,145 +4,145 @@
  * building robust, powerful web applications using Vue and Laravel.
  */
 
-import { EventBus } from '@/shared/eventbus'
+import { EventBus } from "@/shared/eventbus"
 
-require('./bootstrap')
-import router from './routes'
-import App from './App'
-import 'leaflet/dist/leaflet.css'
-import store from './store/store'
-import UserData from './shared/UserData'
-import Default from './layouts/Default'
-import i18n from './i18n'
-import { MapSettingsService } from './services/MapSettingsService'
-import { TicketSettingsService } from './services/TicketSettingsService'
-import { MainSettingsService } from './services/MainSettingsService'
-import Steamaco from '@/plugins/steama-meter/js/modules/Overview/Credential'
-import Spark from '@/plugins/spark-meter/js/modules/Overview/Credential'
-import Calin from '@/plugins/calin-meter/js/modules/Overview/Credential'
-import CalinSmart from '@/plugins/calin-smart-meter/js/modules/Overview/Credential'
-import Kelin from '@/plugins/kelin-meter/js/modules/Overview/Credential'
-import Stron from '@/plugins/stron-meter/js/modules/Overview/Credential'
-import Settings from '@/modules/Settings/MainSettings'
-import Viber from '@/plugins/viber-messaging/js/modules/Overview/Credential'
-import MicroStar from '@/plugins/micro-star-meter/js/modules/Overview/Credential'
-import SunKing from '@/plugins/sun-king-shs/js/modules/Overview/Credential'
-import WaveMoney from '@/plugins/wave-money-payment-provider/js/modules/Overview/Credential'
-import GomeLong from '@/plugins/gome-long-meter/js/modules/Overview/Credential'
-import WaveComTransaction from '@/plugins/wavecom-payment-provider/js/modules/Component'
-import WaveComTransactionDetail from '@/modules/Transactions/WaveComTransactionDetail'
-import AirtelTransactionDetail from '@/modules/Transactions/AirtelTransactionDetail'
-import SwiftaTransactionDetail from '@/modules/Transactions/SwiftaTransactionDetail'
-import ThirdPartyTransactionDetail from '@/modules/Transactions/ThirdPartyTransactionDetail'
-import VodacomTransactionDetail from '@/modules/Transactions/VodacomTransactionDetail'
-import WaveMoneyTransactionDetail from '@/modules/Transactions/WaveMoneyTransactionDetail'
-import AgentTransactionDetail from '@/modules/Agent/AgentTransactionDetail'
-import Angaza from '@/plugins/angaza-shs/js/modules/Overview/Credential'
-import DalyBms from '@/plugins/daly-bms/js/modules/Overview/Credential'
+require("./bootstrap")
+import router from "./routes"
+import App from "./App"
+import "leaflet/dist/leaflet.css"
+import store from "./store/store"
+import UserData from "./shared/UserData"
+import Default from "./layouts/Default"
+import i18n from "./i18n"
+import { MapSettingsService } from "./services/MapSettingsService"
+import { TicketSettingsService } from "./services/TicketSettingsService"
+import { MainSettingsService } from "./services/MainSettingsService"
+import Steamaco from "@/plugins/steama-meter/js/modules/Overview/Credential"
+import Spark from "@/plugins/spark-meter/js/modules/Overview/Credential"
+import Calin from "@/plugins/calin-meter/js/modules/Overview/Credential"
+import CalinSmart from "@/plugins/calin-smart-meter/js/modules/Overview/Credential"
+import Kelin from "@/plugins/kelin-meter/js/modules/Overview/Credential"
+import Stron from "@/plugins/stron-meter/js/modules/Overview/Credential"
+import Settings from "@/modules/Settings/MainSettings"
+import Viber from "@/plugins/viber-messaging/js/modules/Overview/Credential"
+import MicroStar from "@/plugins/micro-star-meter/js/modules/Overview/Credential"
+import SunKing from "@/plugins/sun-king-shs/js/modules/Overview/Credential"
+import WaveMoney from "@/plugins/wave-money-payment-provider/js/modules/Overview/Credential"
+import GomeLong from "@/plugins/gome-long-meter/js/modules/Overview/Credential"
+import WaveComTransaction from "@/plugins/wavecom-payment-provider/js/modules/Component"
+import WaveComTransactionDetail from "@/modules/Transactions/WaveComTransactionDetail"
+import AirtelTransactionDetail from "@/modules/Transactions/AirtelTransactionDetail"
+import SwiftaTransactionDetail from "@/modules/Transactions/SwiftaTransactionDetail"
+import ThirdPartyTransactionDetail from "@/modules/Transactions/ThirdPartyTransactionDetail"
+import VodacomTransactionDetail from "@/modules/Transactions/VodacomTransactionDetail"
+import WaveMoneyTransactionDetail from "@/modules/Transactions/WaveMoneyTransactionDetail"
+import AgentTransactionDetail from "@/modules/Agent/AgentTransactionDetail"
+import Angaza from "@/plugins/angaza-shs/js/modules/Overview/Credential"
+import DalyBms from "@/plugins/daly-bms/js/modules/Overview/Credential"
 
-Vue.component('default', Default)
-Vue.component('Spark-Meter', Spark)
-Vue.component('Steamaco-Meter', Steamaco)
-Vue.component('Calin-Meter', Calin)
-Vue.component('CalinSmart-Meter', CalinSmart)
-Vue.component('Kelin-Meter', Kelin)
-Vue.component('Stron-Meter', Stron)
-Vue.component('Settings', Settings)
-Vue.component('Viber-Messaging', Viber)
-Vue.component('WaveMoney', WaveMoney)
-Vue.component('MicroStar-Meter', MicroStar)
-Vue.component('SunKing-SHS', SunKing)
-Vue.component('GomeLong-Meter', GomeLong)
-Vue.component('WaveComTransaction', WaveComTransaction)
-Vue.component('WaveComTransactionDetail', WaveComTransactionDetail)
-Vue.component('AirtelTransactionDetail', AirtelTransactionDetail)
-Vue.component('SwiftaTransactionDetail', SwiftaTransactionDetail)
-Vue.component('ThirdPartyTransactionDetail', ThirdPartyTransactionDetail)
-Vue.component('VodacomTransactionDetail', VodacomTransactionDetail)
-Vue.component('WaveMoneyTransactionDetail', WaveMoneyTransactionDetail)
-Vue.component('AgentTransactionDetail', AgentTransactionDetail)
-Vue.component('Angaza-SHS', Angaza)
-Vue.component('Daly-Bms', DalyBms)
+Vue.component("default", Default)
+Vue.component("Spark-Meter", Spark)
+Vue.component("Steamaco-Meter", Steamaco)
+Vue.component("Calin-Meter", Calin)
+Vue.component("CalinSmart-Meter", CalinSmart)
+Vue.component("Kelin-Meter", Kelin)
+Vue.component("Stron-Meter", Stron)
+Vue.component("Settings", Settings)
+Vue.component("Viber-Messaging", Viber)
+Vue.component("WaveMoney", WaveMoney)
+Vue.component("MicroStar-Meter", MicroStar)
+Vue.component("SunKing-SHS", SunKing)
+Vue.component("GomeLong-Meter", GomeLong)
+Vue.component("WaveComTransaction", WaveComTransaction)
+Vue.component("WaveComTransactionDetail", WaveComTransactionDetail)
+Vue.component("AirtelTransactionDetail", AirtelTransactionDetail)
+Vue.component("SwiftaTransactionDetail", SwiftaTransactionDetail)
+Vue.component("ThirdPartyTransactionDetail", ThirdPartyTransactionDetail)
+Vue.component("VodacomTransactionDetail", VodacomTransactionDetail)
+Vue.component("WaveMoneyTransactionDetail", WaveMoneyTransactionDetail)
+Vue.component("AgentTransactionDetail", AgentTransactionDetail)
+Vue.component("Angaza-SHS", Angaza)
+Vue.component("Daly-Bms", DalyBms)
 
 const unauthorizedPaths = [
-    'login',
-    'forgot_password',
-    'welcome',
-    'register',
-    '/wave-money/payment',
-    '/wave-money/result',
+  "login",
+  "forgot_password",
+  "welcome",
+  "register",
+  "/wave-money/payment",
+  "/wave-money/result",
 ]
 
 router.beforeEach((to, from, next) => {
-    const authToken = store.getters['auth/getToken']
-    const intervalId = store.getters['auth/getIntervalId']
-    if (unauthorizedPaths.includes(to.name)) {
-        EventBus.$emit('checkPageProtection', to)
-        return next()
-    }
-    if (authToken === undefined || authToken === '') {
-        return next({ name: 'welcome' })
-    }
+  const authToken = store.getters["auth/getToken"]
+  const intervalId = store.getters["auth/getIntervalId"]
+  if (unauthorizedPaths.includes(to.name)) {
+    EventBus.$emit("checkPageProtection", to)
+    return next()
+  }
+  if (authToken === undefined || authToken === "") {
+    return next({ name: "welcome" })
+  }
 
-    store
-        .dispatch('auth/refreshToken', authToken, intervalId)
-        .then((result) => {
-            if (result) {
-                EventBus.$emit('checkPageProtection', to)
-                return next()
-            }
-            next({ name: 'login' })
-        })
-        .catch(() => {
-            return next({ name: 'welcome' })
-        })
+  store
+    .dispatch("auth/refreshToken", authToken, intervalId)
+    .then((result) => {
+      if (result) {
+        EventBus.$emit("checkPageProtection", to)
+        return next()
+      }
+      next({ name: "login" })
+    })
+    .catch(() => {
+      return next({ name: "welcome" })
+    })
 })
 
 /*eslint-disable */
 const app = new Vue({
-    el: '#app',
-    components: {
-        UserData,
-    },
-    data() {
-        return {
-            mainSettingsService: new MainSettingsService(),
-            mapSettingService: new MapSettingsService(),
-            ticketSettingsService: new TicketSettingsService(),
-            resolution: {
-                width: window.innerWidth,
-                height: window.innerHeight,
-                isMobile: false,
-            },
-        }
-    },
-    mounted() {
-        this.handleResize()
-        window.addEventListener('resize', this.handleResize)
-        this.$el.addEventListener('click', this.onHtmlClick)
-    },
-    beforeDestroy() {
-        window.removeEventListener('resize', this.handleResize)
-    },
-    methods: {
-        handleResize() {
-            this.resolution.width = window.innerWidth
-            this.resolution.height = window.innerHeight
-            if (this.resolution.width <= 960) {
-                this.resolution.isMobile = true
-            } else {
-                this.resolution.isMobile = false
-            }
-            this.$store
-                .dispatch('resolution/setResolution', this.resolution)
-                .then(() => {})
-                .catch((err) => {
-                    console.log(err)
-                })
-        },
+  el: "#app",
+  components: {
+    UserData,
+  },
+  data() {
+    return {
+      mainSettingsService: new MainSettingsService(),
+      mapSettingService: new MapSettingsService(),
+      ticketSettingsService: new TicketSettingsService(),
+      resolution: {
+        width: window.innerWidth,
+        height: window.innerHeight,
+        isMobile: false,
+      },
+    }
+  },
+  mounted() {
+    this.handleResize()
+    window.addEventListener("resize", this.handleResize)
+    this.$el.addEventListener("click", this.onHtmlClick)
+  },
+  beforeDestroy() {
+    window.removeEventListener("resize", this.handleResize)
+  },
+  methods: {
+    handleResize() {
+      this.resolution.width = window.innerWidth
+      this.resolution.height = window.innerHeight
+      if (this.resolution.width <= 960) {
+        this.resolution.isMobile = true
+      } else {
+        this.resolution.isMobile = false
+      }
+      this.$store
+        .dispatch("resolution/setResolution", this.resolution)
+        .then(() => {})
+        .catch((err) => {
+          console.log(err)
+        })
     },
-    router: router,
-    store: store,
-    i18n,
-    render: (h) => h(App),
+  },
+  router: router,
+  store: store,
+  i18n,
+  render: (h) => h(App),
 })
diff --git a/Website/ui/src/mixins/currency.js b/Website/ui/src/mixins/currency.js
index 66c0cfd27..83082ff0c 100644
--- a/Website/ui/src/mixins/currency.js
+++ b/Website/ui/src/mixins/currency.js
@@ -1,34 +1,34 @@
-import store from '../store/store'
+import store from "../store/store"
 
 export const currency = {
-    methods: {
-        readable(amount, separator = ',') {
-            // Check for undefined or null amount and return 0
-            if (amount === undefined || amount === null) return '0'
-            // Convert the amount to a string
-            amount = amount.toString()
-            // If the amount is not a valid float, return it as is
-            if (
-                isNaN(parseFloat(amount)) ||
-                parseFloat(amount).toString() !== amount
-            ) {
-                return amount
-            }
-            // Split the amount into whole and decimal parts
-            let [whole, decimal] = amount.replace(/\s+/g, '').split('.')
-            // Format the whole number part with the separator
-            whole = whole.replace(/\B(?=(\d{3})+(?!\d))/g, separator)
-            // Limit the decimal part to two digits, if it exists
-            decimal = decimal ? (decimal + '00').slice(0, 2) : ''
-            // Combine the whole number and decimal parts
-            return decimal ? `${whole}.${decimal}` : whole
-        },
-        moneyFormat(amount) {
-            return new Intl.NumberFormat('en-US', {
-                style: 'currency',
-                currency: store.getters['settings/getMainSettings'].currency,
-                minimumFractionDigits: 2,
-            }).format(amount)
-        },
+  methods: {
+    readable(amount, separator = ",") {
+      // Check for undefined or null amount and return 0
+      if (amount === undefined || amount === null) return "0"
+      // Convert the amount to a string
+      amount = amount.toString()
+      // If the amount is not a valid float, return it as is
+      if (
+        isNaN(parseFloat(amount)) ||
+        parseFloat(amount).toString() !== amount
+      ) {
+        return amount
+      }
+      // Split the amount into whole and decimal parts
+      let [whole, decimal] = amount.replace(/\s+/g, "").split(".")
+      // Format the whole number part with the separator
+      whole = whole.replace(/\B(?=(\d{3})+(?!\d))/g, separator)
+      // Limit the decimal part to two digits, if it exists
+      decimal = decimal ? (decimal + "00").slice(0, 2) : ""
+      // Combine the whole number and decimal parts
+      return decimal ? `${whole}.${decimal}` : whole
     },
+    moneyFormat(amount) {
+      return new Intl.NumberFormat("en-US", {
+        style: "currency",
+        currency: store.getters["settings/getMainSettings"].currency,
+        minimumFractionDigits: 2,
+      }).format(amount)
+    },
+  },
 }
diff --git a/Website/ui/src/mixins/index.js b/Website/ui/src/mixins/index.js
index 668343c15..63068ad26 100644
--- a/Website/ui/src/mixins/index.js
+++ b/Website/ui/src/mixins/index.js
@@ -1,4 +1,4 @@
-export * from './mapSharing'
-export * from './currency'
-export * from './notify'
-export * from './timing'
+export * from "./mapSharing"
+export * from "./currency"
+export * from "./notify"
+export * from "./timing"
diff --git a/Website/ui/src/mixins/mapSharing.js b/Website/ui/src/mixins/mapSharing.js
index 6add38708..bfd28d70b 100644
--- a/Website/ui/src/mixins/mapSharing.js
+++ b/Website/ui/src/mixins/mapSharing.js
@@ -1,200 +1,194 @@
-import store from '@/store/store'
-import { ICON_OPTIONS, MappingService } from '@/services/MappingService'
-import 'leaflet/dist/leaflet.css'
-import 'leaflet-draw/dist/leaflet.draw.css'
-import 'leaflet.markercluster/dist/MarkerCluster.css'
-import 'leaflet.markercluster/dist/MarkerCluster.Default.css'
-import L from 'leaflet'
-import 'leaflet.markercluster'
-import 'leaflet.featuregroup.subgroup'
-import 'leaflet-draw'
-import 'leaflet-bing-layer'
-import marker from 'leaflet/dist/images/marker-icon.png'
-import { EventBus } from '@/shared/eventbus'
+import store from "@/store/store"
+import { ICON_OPTIONS, MappingService } from "@/services/MappingService"
+import "leaflet/dist/leaflet.css"
+import "leaflet-draw/dist/leaflet.draw.css"
+import "leaflet.markercluster/dist/MarkerCluster.css"
+import "leaflet.markercluster/dist/MarkerCluster.Default.css"
+import L from "leaflet"
+import "leaflet.markercluster"
+import "leaflet.featuregroup.subgroup"
+import "leaflet-draw"
+import "leaflet-bing-layer"
+import marker from "leaflet/dist/images/marker-icon.png"
+import { EventBus } from "@/shared/eventbus"
 
 export const sharedMap = {
-    props: {
-        mappingService: {
-            type: MappingService,
-            required: true,
-        },
-        zoom: {
-            type: Number,
-            default: store.getters['settings/getMapSettings'].zoom,
-        },
-        maxZoom: {
-            type: Number,
-            default: 20,
-        },
+  props: {
+    mappingService: {
+      type: MappingService,
+      required: true,
+    },
+    zoom: {
+      type: Number,
+      default: store.getters["settings/getMapSettings"].zoom,
+    },
+    maxZoom: {
+      type: Number,
+      default: 20,
+    },
 
-        mutatingCenter: {
-            type: Array,
-            required: false,
-        },
-        position: {
-            type: String,
-            default: 'topright',
-            required: false,
-        },
-        polygon: {
-            type: Boolean,
-            default: false,
-        },
-        polyline: {
-            type: Boolean,
-            default: false,
-        },
-        marker: {
-            type: Boolean,
-            default: false,
-        },
-        markerCount: {
-            type: Number,
-            default: 1,
-        },
-        circlemarker: {
-            type: Boolean,
-            default: false,
-        },
-        rectangle: {
-            type: Boolean,
-            default: false,
-        },
-        circle: {
-            type: Boolean,
-            default: false,
-        },
-        remove: {
-            type: Boolean,
-            default: false,
+    mutatingCenter: {
+      type: Array,
+      required: false,
+    },
+    position: {
+      type: String,
+      default: "topright",
+      required: false,
+    },
+    polygon: {
+      type: Boolean,
+      default: false,
+    },
+    polyline: {
+      type: Boolean,
+      default: false,
+    },
+    marker: {
+      type: Boolean,
+      default: false,
+    },
+    markerCount: {
+      type: Number,
+      default: 1,
+    },
+    circlemarker: {
+      type: Boolean,
+      default: false,
+    },
+    rectangle: {
+      type: Boolean,
+      default: false,
+    },
+    circle: {
+      type: Boolean,
+      default: false,
+    },
+    remove: {
+      type: Boolean,
+      default: false,
+    },
+    edit: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      markerUrl: this.mappingService.markerUrl,
+      defaultMarkerIconUrl: marker,
+      osmUrl: "http://{s}.tile.osm.org/{z}/{x}/{y}.png",
+      osmAttrib: '© MpManager',
+      osm: null,
+      map: null,
+      editableLayer: null,
+      nonEditableLayer: null,
+      markersLayer: null,
+      drawingOptions: {},
+      geoDataItems: [],
+    }
+  },
+  mounted() {
+    this.initMap()
+  },
+  destroyed() {
+    this.map = null
+  },
+  methods: {
+    initMap() {
+      const drawingOptions = {
+        position: this.position,
+        draw: {
+          polygon: this.polygon,
+          polyline: this.polyline,
+          marker: this.marker,
+          circlemarker: this.circlemarker,
+          rectangle: this.rectangle,
+          circle: this.circle,
         },
         edit: {
-            type: Boolean,
-            default: false,
-        },
+          featureGroup: new L.FeatureGroup(),
+          remove: this.remove,
+          edit: this.edit,
+        },
+      }
+      this.map = L.map("map").setView(this.mappingService.center, this.zoom)
+      this.setTileLayer()
+      if (drawingOptions.draw.marker) {
+        const marker = L.Icon.extend({
+          options: { ...ICON_OPTIONS, iconUrl: this.markerUrl },
+        })
+        drawingOptions.draw.marker = {}
+        drawingOptions.draw.marker.icon = new marker()
+      }
+      this.markersLayer = new L.markerClusterGroup({
+        chunkedLoading: true,
+        spiderfyOnMaxZoom: false,
+      })
+      const drawControl = new L.Control.Draw(drawingOptions)
+      this.map.addLayer(drawingOptions.edit.featureGroup)
+      this.map.addControl(drawControl)
+      this.editableLayer = drawingOptions.edit.featureGroup
+      this.nonEditableLayer = new L.FeatureGroup()
+    },
+    setTileLayer() {
+      if (this.mapProvider) {
+        L.tileLayer
+          .bing(this.bingMapApiKey, {
+            maxZoom: this.maxZoom,
+            attribution: this.osmAttrib,
+          })
+          .addTo(this.map)
+      } else {
+        L.tileLayer(this.osmUrl, {
+          maxZoom: this.maxZoom,
+          attribution: this.osmAttrib,
+        }).addTo(this.map)
+      }
+    },
+    reGenerateMap(mutatingCenter) {
+      this.map.flyTo(mutatingCenter, this.zoom, this.drawingOptions)
+    },
+    routeToDetail(path, id) {
+      this.$router.push(`${path}/${id}`)
+    },
+    routeToDetailWithQueryParam(path, key, value) {
+      this.$router.push(`${path}?${key}=${value}`)
+    },
+    focusOnItem(newLat, newLng) {
+      this.map.setView([newLat, newLng], this.zoom)
+    },
+    getLatLng() {
+      let zoom
+      this.map.on("move", function (e) {
+        zoom = Math.round(e.target._zoom)
+        EventBus.$emit("mapZoom", zoom)
+      })
+      return {
+        lat: this.map.getCenter().lat.toFixed(5),
+        lng: this.map.getCenter().lng.toFixed(5),
+        zoom: zoom,
+      }
     },
-    data() {
-        return {
-            markerUrl: this.mappingService.markerUrl,
-            defaultMarkerIconUrl: marker,
-            osmUrl: 'http://{s}.tile.osm.org/{z}/{x}/{y}.png',
-            osmAttrib: '© MpManager',
-            osm: null,
-            map: null,
-            editableLayer: null,
-            nonEditableLayer: null,
-            markersLayer: null,
-            drawingOptions: {},
-            geoDataItems: [],
+    removeExistingMarkers() {
+      this.map.eachLayer(function (layer) {
+        if (layer._icon) {
+          layer.remove()
         }
+      })
     },
-    mounted() {
-        this.initMap()
-    },
-    destroyed() {
-        this.map = null
-    },
-    methods: {
-        initMap() {
-            const drawingOptions = {
-                position: this.position,
-                draw: {
-                    polygon: this.polygon,
-                    polyline: this.polyline,
-                    marker: this.marker,
-                    circlemarker: this.circlemarker,
-                    rectangle: this.rectangle,
-                    circle: this.circle,
-                },
-                edit: {
-                    featureGroup: new L.FeatureGroup(),
-                    remove: this.remove,
-                    edit: this.edit,
-                },
-            }
-            this.map = L.map('map').setView(
-                this.mappingService.center,
-                this.zoom,
-            )
-            this.setTileLayer()
-            if (drawingOptions.draw.marker) {
-                const marker = L.Icon.extend({
-                    options: { ...ICON_OPTIONS, iconUrl: this.markerUrl },
-                })
-                drawingOptions.draw.marker = {}
-                drawingOptions.draw.marker.icon = new marker()
-            }
-            this.markersLayer = new L.markerClusterGroup({
-                chunkedLoading: true,
-                spiderfyOnMaxZoom: false,
-            })
-            const drawControl = new L.Control.Draw(drawingOptions)
-            this.map.addLayer(drawingOptions.edit.featureGroup)
-            this.map.addControl(drawControl)
-            this.editableLayer = drawingOptions.edit.featureGroup
-            this.nonEditableLayer = new L.FeatureGroup()
-        },
-        setTileLayer() {
-            if (this.mapProvider) {
-                L.tileLayer
-                    .bing(this.bingMapApiKey, {
-                        maxZoom: this.maxZoom,
-                        attribution: this.osmAttrib,
-                    })
-                    .addTo(this.map)
-            } else {
-                L.tileLayer(this.osmUrl, {
-                    maxZoom: this.maxZoom,
-                    attribution: this.osmAttrib,
-                }).addTo(this.map)
-            }
-        },
-        reGenerateMap(mutatingCenter) {
-            this.map.flyTo(mutatingCenter, this.zoom, this.drawingOptions)
-        },
-        routeToDetail(path, id) {
-            this.$router.push(`${path}/${id}`)
-        },
-        routeToDetailWithQueryParam(path, key, value) {
-            this.$router.push(`${path}?${key}=${value}`)
-        },
-        focusOnItem(newLat, newLng) {
-            this.map.setView([newLat, newLng], this.zoom)
-        },
-        getLatLng() {
-            let zoom
-            this.map.on('move', function (e) {
-                zoom = Math.round(e.target._zoom)
-                EventBus.$emit('mapZoom', zoom)
-            })
-            return {
-                lat: this.map.getCenter().lat.toFixed(5),
-                lng: this.map.getCenter().lng.toFixed(5),
-                zoom: zoom,
-            }
-        },
-        removeExistingMarkers() {
-            this.map.eachLayer(function (layer) {
-                if (layer._icon) {
-                    layer.remove()
-                }
-            })
-        },
+  },
+  computed: {
+    mapProvider() {
+      return store.getters["settings/getMapSettings"].provider === "Bing Maps"
     },
-    computed: {
-        mapProvider() {
-            return (
-                store.getters['settings/getMapSettings'].provider ===
-                'Bing Maps'
-            )
-        },
-        bingMapApiKey() {
-            return store.getters['settings/getMapSettings'].bingMapApiKey
-        },
+    bingMapApiKey() {
+      return store.getters["settings/getMapSettings"].bingMapApiKey
     },
-    watch: {
-        mutatingCenter() {
-            this.reGenerateMap(this.mutatingCenter)
-        },
+  },
+  watch: {
+    mutatingCenter() {
+      this.reGenerateMap(this.mutatingCenter)
     },
+  },
 }
diff --git a/Website/ui/src/mixins/notify.js b/Website/ui/src/mixins/notify.js
index aa01dd24b..108992ea4 100644
--- a/Website/ui/src/mixins/notify.js
+++ b/Website/ui/src/mixins/notify.js
@@ -1,12 +1,12 @@
 export const notify = {
-    methods: {
-        alertNotify(type, message) {
-            this.$notify({
-                group: 'notify',
-                type: type,
-                title: type + ' !',
-                text: message,
-            })
-        },
+  methods: {
+    alertNotify(type, message) {
+      this.$notify({
+        group: "notify",
+        type: type,
+        title: type + " !",
+        text: message,
+      })
     },
+  },
 }
diff --git a/Website/ui/src/mixins/timing.js b/Website/ui/src/mixins/timing.js
index 45eda81be..f794d11dd 100644
--- a/Website/ui/src/mixins/timing.js
+++ b/Website/ui/src/mixins/timing.js
@@ -1,27 +1,25 @@
-import moment from 'moment-timezone'
+import moment from "moment-timezone"
 
 export const timing = {
-    methods: {
-        timeForTimeZone(date) {
-            const timezone = moment.tz.guess()
-            return moment
-                .utc(date, 'YYYY-MM-DD HH:mm')
-                .tz(timezone)
-                .format('YYYY-MM-DD HH:mm')
-        },
-        timeForHuman(date) {
-            const timezone = moment.tz.guess()
-            return moment.utc(date, 'YYYY-MM-DD HH:mm').tz(timezone).fromNow()
-        },
-        //calculates the difference of the given two dates and gives a human understandable date back
-        timeDiffForHuman(_startDate, _endDate) {
-            const timezone = moment.tz.guess()
-            const startDate = moment(_startDate, 'YYYY-MM-DD HH:mm:ss').tz(
-                timezone,
-            )
-            const endDate = moment(_endDate, 'YYYY-MM-DD HH:mm:ss').tz(timezone)
+  methods: {
+    timeForTimeZone(date) {
+      const timezone = moment.tz.guess()
+      return moment
+        .utc(date, "YYYY-MM-DD HH:mm")
+        .tz(timezone)
+        .format("YYYY-MM-DD HH:mm")
+    },
+    timeForHuman(date) {
+      const timezone = moment.tz.guess()
+      return moment.utc(date, "YYYY-MM-DD HH:mm").tz(timezone).fromNow()
+    },
+    //calculates the difference of the given two dates and gives a human understandable date back
+    timeDiffForHuman(_startDate, _endDate) {
+      const timezone = moment.tz.guess()
+      const startDate = moment(_startDate, "YYYY-MM-DD HH:mm:ss").tz(timezone)
+      const endDate = moment(_endDate, "YYYY-MM-DD HH:mm:ss").tz(timezone)
 
-            return endDate.diff(startDate, 'seconds')
-        },
+      return endDate.diff(startDate, "seconds")
     },
+  },
 }
diff --git a/Website/ui/src/modal/modal.vue b/Website/ui/src/modal/modal.vue
index 3641111bc..a3be8d6a7 100644
--- a/Website/ui/src/modal/modal.vue
+++ b/Website/ui/src/modal/modal.vue
@@ -1,144 +1,144 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Agent/Agent.vue b/Website/ui/src/modules/Agent/Agent.vue
index c7ce39f04..f2c21b69a 100644
--- a/Website/ui/src/modules/Agent/Agent.vue
+++ b/Website/ui/src/modules/Agent/Agent.vue
@@ -1,66 +1,66 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/AgentDetail.vue b/Website/ui/src/modules/Agent/AgentDetail.vue
index a084ad82c..f0ca08ac8 100644
--- a/Website/ui/src/modules/Agent/AgentDetail.vue
+++ b/Website/ui/src/modules/Agent/AgentDetail.vue
@@ -1,322 +1,302 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Agent/AgentList.vue b/Website/ui/src/modules/Agent/AgentList.vue
index 59b11955b..252e59cb4 100644
--- a/Website/ui/src/modules/Agent/AgentList.vue
+++ b/Website/ui/src/modules/Agent/AgentList.vue
@@ -1,131 +1,128 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Agent/AgentTicketList.vue b/Website/ui/src/modules/Agent/AgentTicketList.vue
index 44aa5cb9e..5afc79665 100644
--- a/Website/ui/src/modules/Agent/AgentTicketList.vue
+++ b/Website/ui/src/modules/Agent/AgentTicketList.vue
@@ -1,71 +1,71 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/AgentTransactionDetail.vue b/Website/ui/src/modules/Agent/AgentTransactionDetail.vue
index 6a44a6940..31c9cd5ae 100644
--- a/Website/ui/src/modules/Agent/AgentTransactionDetail.vue
+++ b/Website/ui/src/modules/Agent/AgentTransactionDetail.vue
@@ -1,97 +1,97 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Agent/AgentTransactionList.vue b/Website/ui/src/modules/Agent/AgentTransactionList.vue
index f76a64659..a0ce5824f 100644
--- a/Website/ui/src/modules/Agent/AgentTransactionList.vue
+++ b/Website/ui/src/modules/Agent/AgentTransactionList.vue
@@ -1,86 +1,86 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/Appliances/AssignAppliance.vue b/Website/ui/src/modules/Agent/Appliances/AssignAppliance.vue
index 64ee33bca..f0a128e75 100644
--- a/Website/ui/src/modules/Agent/Appliances/AssignAppliance.vue
+++ b/Website/ui/src/modules/Agent/Appliances/AssignAppliance.vue
@@ -1,168 +1,163 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/Appliances/AssignedApplianceList.vue b/Website/ui/src/modules/Agent/Appliances/AssignedApplianceList.vue
index 5e6a230c9..da3823ff9 100644
--- a/Website/ui/src/modules/Agent/Appliances/AssignedApplianceList.vue
+++ b/Website/ui/src/modules/Agent/Appliances/AssignedApplianceList.vue
@@ -1,145 +1,140 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/Appliances/SoldApplianceList.vue b/Website/ui/src/modules/Agent/Appliances/SoldApplianceList.vue
index 261c6f89f..1066833d6 100644
--- a/Website/ui/src/modules/Agent/Appliances/SoldApplianceList.vue
+++ b/Website/ui/src/modules/Agent/Appliances/SoldApplianceList.vue
@@ -1,91 +1,89 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/Balance/AddBalance.vue b/Website/ui/src/modules/Agent/Balance/AddBalance.vue
index 7813526b3..dde124acb 100644
--- a/Website/ui/src/modules/Agent/Balance/AddBalance.vue
+++ b/Website/ui/src/modules/Agent/Balance/AddBalance.vue
@@ -1,122 +1,119 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/Balance/AgentBalanceHistory.vue b/Website/ui/src/modules/Agent/Balance/AgentBalanceHistory.vue
index 6ee2766d8..0bf2723da 100644
--- a/Website/ui/src/modules/Agent/Balance/AgentBalanceHistory.vue
+++ b/Website/ui/src/modules/Agent/Balance/AgentBalanceHistory.vue
@@ -1,145 +1,137 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/Commission/AgentCommissionList.vue b/Website/ui/src/modules/Agent/Commission/AgentCommissionList.vue
index 302ae9813..7c809c350 100644
--- a/Website/ui/src/modules/Agent/Commission/AgentCommissionList.vue
+++ b/Website/ui/src/modules/Agent/Commission/AgentCommissionList.vue
@@ -1,331 +1,293 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/Commission/NewCommission.vue b/Website/ui/src/modules/Agent/Commission/NewCommission.vue
index 7e259fbfd..3fe14a63e 100644
--- a/Website/ui/src/modules/Agent/Commission/NewCommission.vue
+++ b/Website/ui/src/modules/Agent/Commission/NewCommission.vue
@@ -1,200 +1,178 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/NewAgent.vue b/Website/ui/src/modules/Agent/NewAgent.vue
index a8f5a4b7d..806ac504d 100644
--- a/Website/ui/src/modules/Agent/NewAgent.vue
+++ b/Website/ui/src/modules/Agent/NewAgent.vue
@@ -1,474 +1,384 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/Receipt/AgentReceiptList.vue b/Website/ui/src/modules/Agent/Receipt/AgentReceiptList.vue
index 77ba7a639..6d450cee8 100644
--- a/Website/ui/src/modules/Agent/Receipt/AgentReceiptList.vue
+++ b/Website/ui/src/modules/Agent/Receipt/AgentReceiptList.vue
@@ -1,127 +1,124 @@
 
 
 
diff --git a/Website/ui/src/modules/Agent/Receipt/NewReceipt.vue b/Website/ui/src/modules/Agent/Receipt/NewReceipt.vue
index 84ff9f7d2..8815cef05 100644
--- a/Website/ui/src/modules/Agent/Receipt/NewReceipt.vue
+++ b/Website/ui/src/modules/Agent/Receipt/NewReceipt.vue
@@ -1,193 +1,178 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Assets/AddAsset.vue b/Website/ui/src/modules/Assets/AddAsset.vue
index 9e36d948a..e42a6da97 100644
--- a/Website/ui/src/modules/Assets/AddAsset.vue
+++ b/Website/ui/src/modules/Assets/AddAsset.vue
@@ -1,193 +1,163 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Assets/AddAssetType.vue b/Website/ui/src/modules/Assets/AddAssetType.vue
index 411021620..91fab0baf 100644
--- a/Website/ui/src/modules/Assets/AddAssetType.vue
+++ b/Website/ui/src/modules/Assets/AddAssetType.vue
@@ -1,130 +1,119 @@
 
 
diff --git a/Website/ui/src/modules/Assets/AssetTypeList.vue b/Website/ui/src/modules/Assets/AssetTypeList.vue
index 2c154c4c0..0ccf8628f 100644
--- a/Website/ui/src/modules/Assets/AssetTypeList.vue
+++ b/Website/ui/src/modules/Assets/AssetTypeList.vue
@@ -1,192 +1,181 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Assets/Assets.vue b/Website/ui/src/modules/Assets/Assets.vue
index 52dccc45d..d1ff5e0a7 100644
--- a/Website/ui/src/modules/Assets/Assets.vue
+++ b/Website/ui/src/modules/Assets/Assets.vue
@@ -1,286 +1,257 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Box.vue b/Website/ui/src/modules/Box.vue
index 3ef97850f..789803878 100644
--- a/Website/ui/src/modules/Box.vue
+++ b/Website/ui/src/modules/Box.vue
@@ -1,135 +1,131 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/ChartBox.vue b/Website/ui/src/modules/ChartBox.vue
index 5e3dba902..bf56d57c8 100644
--- a/Website/ui/src/modules/ChartBox.vue
+++ b/Website/ui/src/modules/ChartBox.vue
@@ -1,106 +1,106 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Client/AddClientModal.vue b/Website/ui/src/modules/Client/AddClientModal.vue
index ce22a1ff6..f2b429614 100644
--- a/Website/ui/src/modules/Client/AddClientModal.vue
+++ b/Website/ui/src/modules/Client/AddClientModal.vue
@@ -1,395 +1,320 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Addresses.vue b/Website/ui/src/modules/Client/Addresses.vue
index 300ea70ae..346d6ffb1 100644
--- a/Website/ui/src/modules/Client/Addresses.vue
+++ b/Website/ui/src/modules/Client/Addresses.vue
@@ -1,320 +1,280 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Appliances/SellAppliance.vue b/Website/ui/src/modules/Client/Appliances/SellAppliance.vue
index 5538d89bc..007edd214 100644
--- a/Website/ui/src/modules/Client/Appliances/SellAppliance.vue
+++ b/Website/ui/src/modules/Client/Appliances/SellAppliance.vue
@@ -1,28 +1,28 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Appliances/SellApplianceCard.vue b/Website/ui/src/modules/Client/Appliances/SellApplianceCard.vue
index 8e0ffd5d0..f936ce2e7 100644
--- a/Website/ui/src/modules/Client/Appliances/SellApplianceCard.vue
+++ b/Website/ui/src/modules/Client/Appliances/SellApplianceCard.vue
@@ -1,571 +1,501 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Appliances/SellApplianceModal.vue b/Website/ui/src/modules/Client/Appliances/SellApplianceModal.vue
index 84a344b3c..57a8bad0d 100644
--- a/Website/ui/src/modules/Client/Appliances/SellApplianceModal.vue
+++ b/Website/ui/src/modules/Client/Appliances/SellApplianceModal.vue
@@ -1,877 +1,708 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Appliances/SoldApplianceDetail.vue b/Website/ui/src/modules/Client/Appliances/SoldApplianceDetail.vue
index c0a980894..f9b09583c 100644
--- a/Website/ui/src/modules/Client/Appliances/SoldApplianceDetail.vue
+++ b/Website/ui/src/modules/Client/Appliances/SoldApplianceDetail.vue
@@ -1,525 +1,476 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Appliances/SoldAppliancesList.vue b/Website/ui/src/modules/Client/Appliances/SoldAppliancesList.vue
index 72ad30837..962d2805e 100644
--- a/Website/ui/src/modules/Client/Appliances/SoldAppliancesList.vue
+++ b/Website/ui/src/modules/Client/Appliances/SoldAppliancesList.vue
@@ -1,129 +1,122 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Client.vue b/Website/ui/src/modules/Client/Client.vue
index 63be6c9f4..66e047d0a 100644
--- a/Website/ui/src/modules/Client/Client.vue
+++ b/Website/ui/src/modules/Client/Client.vue
@@ -1,193 +1,188 @@
 
 
 
diff --git a/Website/ui/src/modules/Client/ClientPersonalData.vue b/Website/ui/src/modules/Client/ClientPersonalData.vue
index 85c8d2f55..55b66e5c4 100644
--- a/Website/ui/src/modules/Client/ClientPersonalData.vue
+++ b/Website/ui/src/modules/Client/ClientPersonalData.vue
@@ -1,294 +1,282 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Clients.vue b/Website/ui/src/modules/Client/Clients.vue
index 2f160597d..ecdaaf24b 100644
--- a/Website/ui/src/modules/Client/Clients.vue
+++ b/Website/ui/src/modules/Client/Clients.vue
@@ -1,246 +1,235 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Client/DeferredPayments.vue b/Website/ui/src/modules/Client/DeferredPayments.vue
index 840cafc21..a201c7b32 100644
--- a/Website/ui/src/modules/Client/DeferredPayments.vue
+++ b/Website/ui/src/modules/Client/DeferredPayments.vue
@@ -1,132 +1,124 @@
 
 
 
diff --git a/Website/ui/src/modules/Client/Devices.vue b/Website/ui/src/modules/Client/Devices.vue
index 6b8444388..359ba051d 100644
--- a/Website/ui/src/modules/Client/Devices.vue
+++ b/Website/ui/src/modules/Client/Devices.vue
@@ -1,80 +1,73 @@
 
 
 
diff --git a/Website/ui/src/modules/Client/PaymentDetail.vue b/Website/ui/src/modules/Client/PaymentDetail.vue
index 53c36837b..33f29dcba 100644
--- a/Website/ui/src/modules/Client/PaymentDetail.vue
+++ b/Website/ui/src/modules/Client/PaymentDetail.vue
@@ -1,135 +1,132 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Client/PaymentFlow.vue b/Website/ui/src/modules/Client/PaymentFlow.vue
index 644e2a779..8cadfb354 100644
--- a/Website/ui/src/modules/Client/PaymentFlow.vue
+++ b/Website/ui/src/modules/Client/PaymentFlow.vue
@@ -1,212 +1,207 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Client/SmsHistory.vue b/Website/ui/src/modules/Client/SmsHistory.vue
index fb065ef1b..6bc84fd23 100644
--- a/Website/ui/src/modules/Client/SmsHistory.vue
+++ b/Website/ui/src/modules/Client/SmsHistory.vue
@@ -1,245 +1,234 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Ticket.vue b/Website/ui/src/modules/Client/Ticket.vue
index 9408adf3c..49918bb2f 100644
--- a/Website/ui/src/modules/Client/Ticket.vue
+++ b/Website/ui/src/modules/Client/Ticket.vue
@@ -1,314 +1,301 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Client/Transactions.vue b/Website/ui/src/modules/Client/Transactions.vue
index 9ea692992..3b24174e3 100644
--- a/Website/ui/src/modules/Client/Transactions.vue
+++ b/Website/ui/src/modules/Client/Transactions.vue
@@ -1,145 +1,136 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Cluster/AddCluster.vue b/Website/ui/src/modules/Cluster/AddCluster.vue
index 81875fd55..b102affd9 100644
--- a/Website/ui/src/modules/Cluster/AddCluster.vue
+++ b/Website/ui/src/modules/Cluster/AddCluster.vue
@@ -1,366 +1,336 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Cluster/BoxGroup.vue b/Website/ui/src/modules/Cluster/BoxGroup.vue
index 4ada31188..d762499be 100644
--- a/Website/ui/src/modules/Cluster/BoxGroup.vue
+++ b/Website/ui/src/modules/Cluster/BoxGroup.vue
@@ -1,98 +1,98 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Cluster/Dashboard.vue b/Website/ui/src/modules/Cluster/Dashboard.vue
index d5d1838d4..815a4ebae 100644
--- a/Website/ui/src/modules/Cluster/Dashboard.vue
+++ b/Website/ui/src/modules/Cluster/Dashboard.vue
@@ -1,197 +1,184 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Cluster/RevenueAnalysis.vue b/Website/ui/src/modules/Cluster/RevenueAnalysis.vue
index 9ae051ef2..e42b73601 100644
--- a/Website/ui/src/modules/Cluster/RevenueAnalysis.vue
+++ b/Website/ui/src/modules/Cluster/RevenueAnalysis.vue
@@ -1,180 +1,170 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Cluster/RevenueTrends.vue b/Website/ui/src/modules/Cluster/RevenueTrends.vue
index 06af921c6..6ed37721f 100644
--- a/Website/ui/src/modules/Cluster/RevenueTrends.vue
+++ b/Website/ui/src/modules/Cluster/RevenueTrends.vue
@@ -1,98 +1,98 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Cluster/UserList.vue b/Website/ui/src/modules/Cluster/UserList.vue
index 1c45819b1..dccd8eba1 100644
--- a/Website/ui/src/modules/Cluster/UserList.vue
+++ b/Website/ui/src/modules/Cluster/UserList.vue
@@ -1,60 +1,56 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Cluster/VillageSelector.vue b/Website/ui/src/modules/Cluster/VillageSelector.vue
index 1ab3d72fa..bf990d899 100644
--- a/Website/ui/src/modules/Cluster/VillageSelector.vue
+++ b/Website/ui/src/modules/Cluster/VillageSelector.vue
@@ -1,60 +1,58 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/ConnectionGroups/ConnectionGroupsList.vue b/Website/ui/src/modules/ConnectionGroups/ConnectionGroupsList.vue
index 89cae454d..af7d5aef7 100644
--- a/Website/ui/src/modules/ConnectionGroups/ConnectionGroupsList.vue
+++ b/Website/ui/src/modules/ConnectionGroups/ConnectionGroupsList.vue
@@ -1,174 +1,172 @@
 
 
 
 
diff --git a/Website/ui/src/modules/ConnectionGroups/NewConnectionGroup.vue b/Website/ui/src/modules/ConnectionGroups/NewConnectionGroup.vue
index 4ac6d8ba5..8be809f96 100644
--- a/Website/ui/src/modules/ConnectionGroups/NewConnectionGroup.vue
+++ b/Website/ui/src/modules/ConnectionGroups/NewConnectionGroup.vue
@@ -1,121 +1,111 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/ConnectionTypes/ConnectionTypeDetail.vue b/Website/ui/src/modules/ConnectionTypes/ConnectionTypeDetail.vue
index 0bec16cdc..39e67e7b8 100644
--- a/Website/ui/src/modules/ConnectionTypes/ConnectionTypeDetail.vue
+++ b/Website/ui/src/modules/ConnectionTypes/ConnectionTypeDetail.vue
@@ -1,568 +1,491 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/ConnectionTypes/ConnectionTypesList.vue b/Website/ui/src/modules/ConnectionTypes/ConnectionTypesList.vue
index ad848cb44..d44d78d8f 100644
--- a/Website/ui/src/modules/ConnectionTypes/ConnectionTypesList.vue
+++ b/Website/ui/src/modules/ConnectionTypes/ConnectionTypesList.vue
@@ -1,98 +1,98 @@
 
 
 
 
diff --git a/Website/ui/src/modules/ConnectionTypes/NewConnectionType.vue b/Website/ui/src/modules/ConnectionTypes/NewConnectionType.vue
index bb9ba4090..7dc5aa14a 100644
--- a/Website/ui/src/modules/ConnectionTypes/NewConnectionType.vue
+++ b/Website/ui/src/modules/ConnectionTypes/NewConnectionType.vue
@@ -1,121 +1,111 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Dashboard/BoxGroup.vue b/Website/ui/src/modules/Dashboard/BoxGroup.vue
index 90f154026..664761c65 100644
--- a/Website/ui/src/modules/Dashboard/BoxGroup.vue
+++ b/Website/ui/src/modules/Dashboard/BoxGroup.vue
@@ -1,131 +1,131 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Dashboard/Dashboard.vue b/Website/ui/src/modules/Dashboard/Dashboard.vue
index 8675167c4..53d1e67bb 100644
--- a/Website/ui/src/modules/Dashboard/Dashboard.vue
+++ b/Website/ui/src/modules/Dashboard/Dashboard.vue
@@ -1,154 +1,144 @@
 
 
 
diff --git a/Website/ui/src/modules/Dashboard/FinancialOverview.vue b/Website/ui/src/modules/Dashboard/FinancialOverview.vue
index 5d7ec56eb..b73154cd7 100644
--- a/Website/ui/src/modules/Dashboard/FinancialOverview.vue
+++ b/Website/ui/src/modules/Dashboard/FinancialOverview.vue
@@ -1,222 +1,222 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Dashboard/UserList.vue b/Website/ui/src/modules/Dashboard/UserList.vue
index c669b454d..303dc89d2 100644
--- a/Website/ui/src/modules/Dashboard/UserList.vue
+++ b/Website/ui/src/modules/Dashboard/UserList.vue
@@ -1,62 +1,58 @@
 
 
 
 
diff --git a/Website/ui/src/modules/EBikes/AddEBikeModal.vue b/Website/ui/src/modules/EBikes/AddEBikeModal.vue
index 695e75785..046ed2187 100644
--- a/Website/ui/src/modules/EBikes/AddEBikeModal.vue
+++ b/Website/ui/src/modules/EBikes/AddEBikeModal.vue
@@ -1,224 +1,188 @@
 
 
 
diff --git a/Website/ui/src/modules/EBikes/EBikeDetailModal.vue b/Website/ui/src/modules/EBikes/EBikeDetailModal.vue
index 5eb60cb06..2e793e0a8 100644
--- a/Website/ui/src/modules/EBikes/EBikeDetailModal.vue
+++ b/Website/ui/src/modules/EBikes/EBikeDetailModal.vue
@@ -1,240 +1,228 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/EBikes/EBikes.vue b/Website/ui/src/modules/EBikes/EBikes.vue
index f6a7ddd85..b87f4ff88 100644
--- a/Website/ui/src/modules/EBikes/EBikes.vue
+++ b/Website/ui/src/modules/EBikes/EBikes.vue
@@ -1,154 +1,152 @@
 
 
 
 
diff --git a/Website/ui/src/modules/ExportedReports/BookKeeping.vue b/Website/ui/src/modules/ExportedReports/BookKeeping.vue
index 397c27ccd..36646d02a 100644
--- a/Website/ui/src/modules/ExportedReports/BookKeeping.vue
+++ b/Website/ui/src/modules/ExportedReports/BookKeeping.vue
@@ -1,81 +1,72 @@
 
 
 
 
diff --git a/Website/ui/src/modules/ExportedReports/PeriodicReports.vue b/Website/ui/src/modules/ExportedReports/PeriodicReports.vue
index bb17629c3..4dc58c4af 100644
--- a/Website/ui/src/modules/ExportedReports/PeriodicReports.vue
+++ b/Website/ui/src/modules/ExportedReports/PeriodicReports.vue
@@ -1,98 +1,93 @@
 
 
 
 
diff --git a/Website/ui/src/modules/ExportedReports/Reports.vue b/Website/ui/src/modules/ExportedReports/Reports.vue
index 72894911c..391298e62 100644
--- a/Website/ui/src/modules/ExportedReports/Reports.vue
+++ b/Website/ui/src/modules/ExportedReports/Reports.vue
@@ -1,38 +1,38 @@
 
 
 
 
diff --git a/Website/ui/src/modules/ForgotPassword/ForgotPassword.vue b/Website/ui/src/modules/ForgotPassword/ForgotPassword.vue
index 28ae040a5..abb35254c 100644
--- a/Website/ui/src/modules/ForgotPassword/ForgotPassword.vue
+++ b/Website/ui/src/modules/ForgotPassword/ForgotPassword.vue
@@ -1,102 +1,97 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Login/Login.vue b/Website/ui/src/modules/Login/Login.vue
index 89c4e9e6a..4ffe5467a 100644
--- a/Website/ui/src/modules/Login/Login.vue
+++ b/Website/ui/src/modules/Login/Login.vue
@@ -1,78 +1,78 @@
 
 
 
diff --git a/Website/ui/src/modules/Login/LoginCard.vue b/Website/ui/src/modules/Login/LoginCard.vue
index 7d2dba944..20004a1c5 100644
--- a/Website/ui/src/modules/Login/LoginCard.vue
+++ b/Website/ui/src/modules/Login/LoginCard.vue
@@ -1,293 +1,289 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Login/LoginFooter.vue b/Website/ui/src/modules/Login/LoginFooter.vue
index 96473240f..7a23c59d3 100644
--- a/Website/ui/src/modules/Login/LoginFooter.vue
+++ b/Website/ui/src/modules/Login/LoginFooter.vue
@@ -1,10 +1,10 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Login/LoginHeader.vue b/Website/ui/src/modules/Login/LoginHeader.vue
index ac2b2f48d..aaeae8655 100644
--- a/Website/ui/src/modules/Login/LoginHeader.vue
+++ b/Website/ui/src/modules/Login/LoginHeader.vue
@@ -1,10 +1,10 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Maintenance/Maintenance.vue b/Website/ui/src/modules/Maintenance/Maintenance.vue
index 47e5a1017..80cccdcd3 100644
--- a/Website/ui/src/modules/Maintenance/Maintenance.vue
+++ b/Website/ui/src/modules/Maintenance/Maintenance.vue
@@ -1,379 +1,334 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Maintenance/NewUser.vue b/Website/ui/src/modules/Maintenance/NewUser.vue
index 859769b10..0d73739c8 100644
--- a/Website/ui/src/modules/Maintenance/NewUser.vue
+++ b/Website/ui/src/modules/Maintenance/NewUser.vue
@@ -1,352 +1,292 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Map/ClientMap.vue b/Website/ui/src/modules/Map/ClientMap.vue
index 0616b7b35..ee206e114 100644
--- a/Website/ui/src/modules/Map/ClientMap.vue
+++ b/Website/ui/src/modules/Map/ClientMap.vue
@@ -1,86 +1,82 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Map/ClusterMap.vue b/Website/ui/src/modules/Map/ClusterMap.vue
index 5f3f7508f..3b8ecc130 100644
--- a/Website/ui/src/modules/Map/ClusterMap.vue
+++ b/Website/ui/src/modules/Map/ClusterMap.vue
@@ -1,242 +1,226 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Map/DashboardMap.vue b/Website/ui/src/modules/Map/DashboardMap.vue
index 231063e41..dd8ed1e2b 100644
--- a/Website/ui/src/modules/Map/DashboardMap.vue
+++ b/Website/ui/src/modules/Map/DashboardMap.vue
@@ -1,135 +1,125 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Map/MiniGridMap.vue b/Website/ui/src/modules/Map/MiniGridMap.vue
index a49fa0b45..6a3190020 100644
--- a/Website/ui/src/modules/Map/MiniGridMap.vue
+++ b/Website/ui/src/modules/Map/MiniGridMap.vue
@@ -1,388 +1,369 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Map/SettingsMap.vue b/Website/ui/src/modules/Map/SettingsMap.vue
index dde14ee9a..9db9c6530 100644
--- a/Website/ui/src/modules/Map/SettingsMap.vue
+++ b/Website/ui/src/modules/Map/SettingsMap.vue
@@ -1,24 +1,24 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Map/VillageMap.vue b/Website/ui/src/modules/Map/VillageMap.vue
index 75d242d16..d7fbdd0a3 100644
--- a/Website/ui/src/modules/Map/VillageMap.vue
+++ b/Website/ui/src/modules/Map/VillageMap.vue
@@ -1,204 +1,193 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Meter/Basic.vue b/Website/ui/src/modules/Meter/Basic.vue
index cef9daa87..bb5ba05a1 100644
--- a/Website/ui/src/modules/Meter/Basic.vue
+++ b/Website/ui/src/modules/Meter/Basic.vue
@@ -1,199 +1,183 @@
 
 
 
diff --git a/Website/ui/src/modules/Meter/Details.vue b/Website/ui/src/modules/Meter/Details.vue
index b2b5dbc67..2f0cec441 100644
--- a/Website/ui/src/modules/Meter/Details.vue
+++ b/Website/ui/src/modules/Meter/Details.vue
@@ -1,263 +1,240 @@
 
 
 
diff --git a/Website/ui/src/modules/Meter/Meter.vue b/Website/ui/src/modules/Meter/Meter.vue
index 74335f0b9..b34491a7c 100644
--- a/Website/ui/src/modules/Meter/Meter.vue
+++ b/Website/ui/src/modules/Meter/Meter.vue
@@ -1,148 +1,138 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Meter/Meters.vue b/Website/ui/src/modules/Meter/Meters.vue
index 9eeb7ce70..1a2261c41 100644
--- a/Website/ui/src/modules/Meter/Meters.vue
+++ b/Website/ui/src/modules/Meter/Meters.vue
@@ -1,175 +1,169 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Meter/Readings.vue b/Website/ui/src/modules/Meter/Readings.vue
index c9aecf05c..3bbb6de10 100644
--- a/Website/ui/src/modules/Meter/Readings.vue
+++ b/Website/ui/src/modules/Meter/Readings.vue
@@ -1,183 +1,181 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Meter/Transactions.vue b/Website/ui/src/modules/Meter/Transactions.vue
index 7bbf38013..54d687c44 100644
--- a/Website/ui/src/modules/Meter/Transactions.vue
+++ b/Website/ui/src/modules/Meter/Transactions.vue
@@ -1,104 +1,98 @@
 
 
 
 
diff --git a/Website/ui/src/modules/MeterType/MeterTypes.vue b/Website/ui/src/modules/MeterType/MeterTypes.vue
index 0cd8e9a3b..6005a37d0 100644
--- a/Website/ui/src/modules/MeterType/MeterTypes.vue
+++ b/Website/ui/src/modules/MeterType/MeterTypes.vue
@@ -1,205 +1,183 @@
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/AddMiniGrid.vue b/Website/ui/src/modules/MiniGrid/AddMiniGrid.vue
index 813e9641e..90e433637 100644
--- a/Website/ui/src/modules/MiniGrid/AddMiniGrid.vue
+++ b/Website/ui/src/modules/MiniGrid/AddMiniGrid.vue
@@ -1,335 +1,289 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/BoxGroup.vue b/Website/ui/src/modules/MiniGrid/BoxGroup.vue
index 7cfed911a..5d560fc23 100644
--- a/Website/ui/src/modules/MiniGrid/BoxGroup.vue
+++ b/Website/ui/src/modules/MiniGrid/BoxGroup.vue
@@ -1,107 +1,99 @@
 
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/Dashboard.vue b/Website/ui/src/modules/MiniGrid/Dashboard.vue
index 69de96689..2204064e6 100644
--- a/Website/ui/src/modules/MiniGrid/Dashboard.vue
+++ b/Website/ui/src/modules/MiniGrid/Dashboard.vue
@@ -1,186 +1,164 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/EnergyChartBox.vue b/Website/ui/src/modules/MiniGrid/EnergyChartBox.vue
index f58546016..62fc94bd3 100644
--- a/Website/ui/src/modules/MiniGrid/EnergyChartBox.vue
+++ b/Website/ui/src/modules/MiniGrid/EnergyChartBox.vue
@@ -1,11 +1,11 @@
 
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/RevenuePerCustomerType.vue b/Website/ui/src/modules/MiniGrid/RevenuePerCustomerType.vue
index dfc573a13..81a191483 100644
--- a/Website/ui/src/modules/MiniGrid/RevenuePerCustomerType.vue
+++ b/Website/ui/src/modules/MiniGrid/RevenuePerCustomerType.vue
@@ -1,52 +1,52 @@
 
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/RevenueTargetPerCustomerType.vue b/Website/ui/src/modules/MiniGrid/RevenueTargetPerCustomerType.vue
index 2e1c61c92..f9de1ad4a 100644
--- a/Website/ui/src/modules/MiniGrid/RevenueTargetPerCustomerType.vue
+++ b/Website/ui/src/modules/MiniGrid/RevenueTargetPerCustomerType.vue
@@ -1,71 +1,71 @@
 
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/RevenueTrends.vue b/Website/ui/src/modules/MiniGrid/RevenueTrends.vue
index 0b72f4d7c..e6cb75ce8 100644
--- a/Website/ui/src/modules/MiniGrid/RevenueTrends.vue
+++ b/Website/ui/src/modules/MiniGrid/RevenueTrends.vue
@@ -1,72 +1,72 @@
 
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/SolarDataAndWeather.vue b/Website/ui/src/modules/MiniGrid/SolarDataAndWeather.vue
index 6a4b2de75..2ebcabf3a 100644
--- a/Website/ui/src/modules/MiniGrid/SolarDataAndWeather.vue
+++ b/Website/ui/src/modules/MiniGrid/SolarDataAndWeather.vue
@@ -1,168 +1,156 @@
 
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/TargetList.vue b/Website/ui/src/modules/MiniGrid/TargetList.vue
index 1d1b59c5b..cdbb94d97 100644
--- a/Website/ui/src/modules/MiniGrid/TargetList.vue
+++ b/Website/ui/src/modules/MiniGrid/TargetList.vue
@@ -1,376 +1,342 @@
 
 
 
 
diff --git a/Website/ui/src/modules/MiniGrid/TicketsOverview.vue b/Website/ui/src/modules/MiniGrid/TicketsOverview.vue
index dfe03480b..caad6534a 100644
--- a/Website/ui/src/modules/MiniGrid/TicketsOverview.vue
+++ b/Website/ui/src/modules/MiniGrid/TicketsOverview.vue
@@ -1,56 +1,53 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Profile/EditUser.vue b/Website/ui/src/modules/Profile/EditUser.vue
index 66fa1b6be..de5fd81bf 100644
--- a/Website/ui/src/modules/Profile/EditUser.vue
+++ b/Website/ui/src/modules/Profile/EditUser.vue
@@ -1,191 +1,155 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Profile/NewUser.vue b/Website/ui/src/modules/Profile/NewUser.vue
index a0a217193..8bf221111 100644
--- a/Website/ui/src/modules/Profile/NewUser.vue
+++ b/Website/ui/src/modules/Profile/NewUser.vue
@@ -1,181 +1,154 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Profile/User.vue b/Website/ui/src/modules/Profile/User.vue
index d00295eed..e27970280 100644
--- a/Website/ui/src/modules/Profile/User.vue
+++ b/Website/ui/src/modules/Profile/User.vue
@@ -1,328 +1,285 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Profile/UserManagement.vue b/Website/ui/src/modules/Profile/UserManagement.vue
index cfb20092b..1d8336a79 100644
--- a/Website/ui/src/modules/Profile/UserManagement.vue
+++ b/Website/ui/src/modules/Profile/UserManagement.vue
@@ -1,165 +1,165 @@
 
 
diff --git a/Website/ui/src/modules/Register/Register.vue b/Website/ui/src/modules/Register/Register.vue
index 4b51d446b..52afc6adf 100644
--- a/Website/ui/src/modules/Register/Register.vue
+++ b/Website/ui/src/modules/Register/Register.vue
@@ -1,822 +1,672 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Settings/MailSettings.vue b/Website/ui/src/modules/Settings/MailSettings.vue
index ea5ed5546..8008db414 100644
--- a/Website/ui/src/modules/Settings/MailSettings.vue
+++ b/Website/ui/src/modules/Settings/MailSettings.vue
@@ -1,157 +1,144 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Settings/MainSettings.vue b/Website/ui/src/modules/Settings/MainSettings.vue
index 76d42ed52..f7250c4d0 100644
--- a/Website/ui/src/modules/Settings/MainSettings.vue
+++ b/Website/ui/src/modules/Settings/MainSettings.vue
@@ -1,289 +1,262 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Settings/MapSettings.vue b/Website/ui/src/modules/Settings/MapSettings.vue
index 4e279070a..79f01c561 100644
--- a/Website/ui/src/modules/Settings/MapSettings.vue
+++ b/Website/ui/src/modules/Settings/MapSettings.vue
@@ -1,254 +1,244 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Settings/PluginSettings.vue b/Website/ui/src/modules/Settings/PluginSettings.vue
index bcef00d02..2ad9b93ec 100644
--- a/Website/ui/src/modules/Settings/PluginSettings.vue
+++ b/Website/ui/src/modules/Settings/PluginSettings.vue
@@ -1,156 +1,158 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Settings/Settings.vue b/Website/ui/src/modules/Settings/Settings.vue
index da5618fe5..d74dbbe8f 100644
--- a/Website/ui/src/modules/Settings/Settings.vue
+++ b/Website/ui/src/modules/Settings/Settings.vue
@@ -1,104 +1,99 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Settings/SmsAndroidSetting.vue b/Website/ui/src/modules/Settings/SmsAndroidSetting.vue
index ff7b32753..60f148d82 100644
--- a/Website/ui/src/modules/Settings/SmsAndroidSetting.vue
+++ b/Website/ui/src/modules/Settings/SmsAndroidSetting.vue
@@ -1,103 +1,92 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Settings/SmsApplianceRemindRate.vue b/Website/ui/src/modules/Settings/SmsApplianceRemindRate.vue
index 831e8c497..e4c830753 100644
--- a/Website/ui/src/modules/Settings/SmsApplianceRemindRate.vue
+++ b/Website/ui/src/modules/Settings/SmsApplianceRemindRate.vue
@@ -1,179 +1,164 @@
 
 
 
diff --git a/Website/ui/src/modules/Settings/SmsBody.vue b/Website/ui/src/modules/Settings/SmsBody.vue
index 6815aef9d..24d8b494f 100644
--- a/Website/ui/src/modules/Settings/SmsBody.vue
+++ b/Website/ui/src/modules/Settings/SmsBody.vue
@@ -1,148 +1,143 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Settings/SmsSettings.vue b/Website/ui/src/modules/Settings/SmsSettings.vue
index c13b424ac..b25e2d0fb 100644
--- a/Website/ui/src/modules/Settings/SmsSettings.vue
+++ b/Website/ui/src/modules/Settings/SmsSettings.vue
@@ -1,311 +1,286 @@
 
 
 
 
 
diff --git a/Website/ui/src/modules/Settings/TicketSettings.vue b/Website/ui/src/modules/Settings/TicketSettings.vue
index c18c1ed5a..c4911f622 100644
--- a/Website/ui/src/modules/Settings/TicketSettings.vue
+++ b/Website/ui/src/modules/Settings/TicketSettings.vue
@@ -1,114 +1,109 @@
 
 
 
 
diff --git a/Website/ui/src/modules/Sidebar/SideBar.vue b/Website/ui/src/modules/Sidebar/SideBar.vue
index e44542a00..46669c78e 100644
--- a/Website/ui/src/modules/Sidebar/SideBar.vue
+++ b/Website/ui/src/modules/Sidebar/SideBar.vue
@@ -1,342 +1,286 @@