mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-29 12:41:10 -04:00 
			
		
		
		
	Compare commits
	
		
			17 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2e5cb58c39 | |||
| db622e7458 | |||
| 09bbf98e61 | |||
| ca90ff2767 | |||
| 368dd16c9b | |||
| 251648f53c | |||
| ffa5b6b2ad | |||
| bd9beaa343 | |||
| 3e4decdfb9 | |||
| 165907d144 | |||
| 6278417423 | |||
| dc37f565c4 | |||
| 532196a9b4 | |||
| 6a4009e13a | |||
| a8f98e51bb | |||
| 98d15143c2 | |||
| 96187870b4 | 
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -11,5 +11,3 @@ Homestead.yaml | |||||||
| .rnd | .rnd | ||||||
| /.expo | /.expo | ||||||
| /.vscode | /.vscode | ||||||
| docker-compose.yml |  | ||||||
| docker-compose.yaml |  | ||||||
|  | |||||||
							
								
								
									
										74
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								Dockerfile
									
									
									
									
									
								
							| @ -1,53 +1,39 @@ | |||||||
| ##### STAGE 1 ##### | FROM php:7.4-fpm | ||||||
|  |  | ||||||
| FROM composer as composer | # Arguments defined in docker-compose.yml | ||||||
|  | ARG user | ||||||
|  | ARG uid | ||||||
|  |  | ||||||
| # Copy composer files from project root into composer container's working dir | # Install system dependencies | ||||||
| COPY composer.* /app/ | RUN apt-get update && apt-get install -y \ | ||||||
|  |     git \ | ||||||
|  |     curl \ | ||||||
|  |     libpng-dev \ | ||||||
|  |     libonig-dev \ | ||||||
|  |     libxml2-dev \ | ||||||
|  |     zip \ | ||||||
|  |     unzip \  | ||||||
|  |     libzip-dev \  | ||||||
|  |     libmagickwand-dev | ||||||
|  |  | ||||||
| # Copy database directory for autoloader optimization | # Clear cache | ||||||
| COPY database /app/database | RUN apt-get clean && rm -rf /var/lib/apt/lists/* | ||||||
|  |  | ||||||
| # Run composer to build dependencies in vendor folder | RUN pecl install imagick \  | ||||||
| RUN composer install --no-scripts --no-suggest --no-interaction --prefer-dist --optimize-autoloader  |     && docker-php-ext-enable imagick | ||||||
|  |  | ||||||
| # Copy everything from project root into composer container's working dir | # Install PHP extensions | ||||||
| COPY . /app | RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd  | ||||||
|  |  | ||||||
| RUN composer dump-autoload --optimize --classmap-authoritative | # Get latest Composer | ||||||
|  | COPY --from=composer:latest /usr/bin/composer /usr/bin/composer | ||||||
|  |  | ||||||
| ##### STAGE 2 ##### | # Create system user to run Composer and Artisan Commands | ||||||
|  | RUN useradd -G www-data,root -u $uid -d /home/$user $user | ||||||
|  | RUN mkdir -p /home/$user/.composer && \ | ||||||
|  |     chown -R $user:$user /home/$user | ||||||
|  |  | ||||||
| FROM php:7.3.12-fpm-alpine | # Set working directory | ||||||
|  | WORKDIR /var/www | ||||||
|  |  | ||||||
| # Use the default production configuration | USER $user | ||||||
| RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" |  | ||||||
|  |  | ||||||
| RUN apk add --no-cache libpng-dev libxml2-dev oniguruma-dev libzip-dev gnu-libiconv && \ |  | ||||||
|     docker-php-ext-install bcmath ctype json gd mbstring pdo pdo_mysql tokenizer xml zip |  | ||||||
|  |  | ||||||
| ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php |  | ||||||
|  |  | ||||||
| # Set container's working dir |  | ||||||
| WORKDIR /app |  | ||||||
|   |  | ||||||
| # Copy everything from project root into php container's working dir |  | ||||||
| COPY . /app |  | ||||||
|  |  | ||||||
| # Copy vendor folder from composer container into php container |  | ||||||
| COPY --from=composer /app/vendor /app/vendor |  | ||||||
|  |  | ||||||
| RUN touch database/database.sqlite && \ |  | ||||||
|     cp .env.example .env && \ |  | ||||||
|     php artisan config:cache && \ |  | ||||||
|     php artisan passport:keys && \ |  | ||||||
|     php artisan key:generate && \ |  | ||||||
|     chown -R www-data:www-data . && \ |  | ||||||
|     chmod -R 755 . && \ |  | ||||||
|     chmod -R 775 storage/framework/ && \ |  | ||||||
|     chmod -R 775 storage/logs/ && \ |  | ||||||
|     chmod -R 775 bootstrap/cache/   |  | ||||||
|  |  | ||||||
| EXPOSE 9000 |  | ||||||
|  |  | ||||||
| CMD ["php-fpm", "--nodaemonize"] |  | ||||||
|  | |||||||
| @ -6,6 +6,7 @@ use Illuminate\Console\Command; | |||||||
| use Crater\Space\Updater; | use Crater\Space\Updater; | ||||||
| use Crater\Setting; | use Crater\Setting; | ||||||
|  |  | ||||||
|  | // Implementation taken from Akaunting - https://github.com/akaunting/akaunting | ||||||
| class UpdateCommand extends Command | class UpdateCommand extends Command | ||||||
| { | { | ||||||
|     public $installed; |     public $installed; | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
|  |  | ||||||
| namespace Crater\Listeners\Updates; | namespace Crater\Listeners\Updates; | ||||||
|  |  | ||||||
|  | // Implementation taken from Akaunting - https://github.com/akaunting/akaunting | ||||||
| class Listener | class Listener | ||||||
| { | { | ||||||
|     const VERSION = ''; |     const VERSION = ''; | ||||||
|  | |||||||
							
								
								
									
										32
									
								
								app/Listeners/Updates/v3/Version311.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								app/Listeners/Updates/v3/Version311.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Crater\Listeners\Updates\v3; | ||||||
|  |  | ||||||
|  | use Crater\Listeners\Updates\Listener; | ||||||
|  | use Crater\Events\UpdateFinished; | ||||||
|  | use Crater\Setting; | ||||||
|  | use Crater\Currency; | ||||||
|  | use Artisan; | ||||||
|  |  | ||||||
|  | class Version311 extends Listener | ||||||
|  | { | ||||||
|  |     const VERSION = '3.1.1'; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Handle the event. | ||||||
|  |      * | ||||||
|  |      * @param UpdateFinished $event | ||||||
|  |      * @return void | ||||||
|  |      */ | ||||||
|  |     public function handle(UpdateFinished $event) | ||||||
|  |     { | ||||||
|  |         if ($this->isListenerFired($event)) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Artisan::call('migrate', ['--force' => true]); | ||||||
|  |  | ||||||
|  |         // Update Crater app version | ||||||
|  |         Setting::setSetting('version', static::VERSION); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -13,6 +13,7 @@ use Crater\Listeners\Updates\v2\Version202; | |||||||
| use Crater\Listeners\Updates\v2\Version210; | use Crater\Listeners\Updates\v2\Version210; | ||||||
| use Crater\Listeners\Updates\v3\Version300; | use Crater\Listeners\Updates\v3\Version300; | ||||||
| use Crater\Listeners\Updates\v3\Version310; | use Crater\Listeners\Updates\v3\Version310; | ||||||
|  | use Crater\Listeners\Updates\v3\Version311; | ||||||
|  |  | ||||||
| class EventServiceProvider extends ServiceProvider | class EventServiceProvider extends ServiceProvider | ||||||
| { | { | ||||||
| @ -30,6 +31,7 @@ class EventServiceProvider extends ServiceProvider | |||||||
|             Version210::class, |             Version210::class, | ||||||
|             Version300::class, |             Version300::class, | ||||||
|             Version310::class, |             Version310::class, | ||||||
|  |             Version311::class, | ||||||
|         ], |         ], | ||||||
|         Registered::class => [ |         Registered::class => [ | ||||||
|             SendEmailVerificationNotification::class, |             SendEmailVerificationNotification::class, | ||||||
|  | |||||||
| @ -6,6 +6,7 @@ use GuzzleHttp\Client; | |||||||
| use GuzzleHttp\Exception\RequestException; | use GuzzleHttp\Exception\RequestException; | ||||||
| use Crater\Setting; | use Crater\Setting; | ||||||
|  |  | ||||||
|  | // Implementation taken from Akaunting - https://github.com/akaunting/akaunting | ||||||
| trait SiteApi | trait SiteApi | ||||||
| { | { | ||||||
|  |  | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ use GuzzleHttp\Exception\RequestException; | |||||||
| use Crater\Events\UpdateFinished; | use Crater\Events\UpdateFinished; | ||||||
| use ZipArchive; | use ZipArchive; | ||||||
|  |  | ||||||
|  | // Implementation taken from Akaunting - https://github.com/akaunting/akaunting | ||||||
| class Updater | class Updater | ||||||
| { | { | ||||||
|     use SiteApi; |     use SiteApi; | ||||||
|  | |||||||
| @ -54,20 +54,11 @@ | |||||||
|     "minimum-stability": "dev", |     "minimum-stability": "dev", | ||||||
|     "prefer-stable": true, |     "prefer-stable": true, | ||||||
|     "scripts": { |     "scripts": { | ||||||
|         "initial-setup": [ |  | ||||||
|             "test -f .env || (cp .env.example .env; php artisan key:generate 2>/dev/null; exit 0)" |  | ||||||
|         ], |  | ||||||
|         "pre-install-cmd": [ |  | ||||||
|             "@initial-setup" |  | ||||||
|         ], |  | ||||||
|         "pre-update-cmd": [ |  | ||||||
|             "@initial-setup" |  | ||||||
|         ], |  | ||||||
|         "post-root-package-install": [ |         "post-root-package-install": [ | ||||||
|             "@initial-setup" |             "php -r \"file_exists('.env') || copy('.env.example', '.env');\"" | ||||||
|         ], |         ], | ||||||
|         "post-create-project-cmd": [ |         "post-create-project-cmd": [ | ||||||
|             "@initial-setup" |             "php artisan key:generate --ansi" | ||||||
|         ], |         ], | ||||||
|         "post-autoload-dump": [ |         "post-autoload-dump": [ | ||||||
|             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", |             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", | ||||||
|  | |||||||
| @ -9,6 +9,6 @@ return [ | |||||||
|     | |     | | ||||||
|     */ |     */ | ||||||
|  |  | ||||||
|     'version' => '3.1.0', |     'version' => '3.1.1', | ||||||
|  |  | ||||||
| ]; | ]; | ||||||
|  | |||||||
| @ -1,40 +0,0 @@ | |||||||
| version: '3.1' |  | ||||||
|  |  | ||||||
| services: |  | ||||||
|  |  | ||||||
|   web: |  | ||||||
|     image: nginx |  | ||||||
|     depends_on: |  | ||||||
|       - php |  | ||||||
|     ports: |  | ||||||
|       - 8080:80 |  | ||||||
|     volumes: |  | ||||||
|       - ./nginx.conf:/etc/nginx/nginx.conf:ro |  | ||||||
|       - app:/app |  | ||||||
|     restart: always  |  | ||||||
|      |  | ||||||
|   php: |  | ||||||
|     build: . |  | ||||||
|     depends_on: |  | ||||||
|       - db |  | ||||||
|     expose: |  | ||||||
|       - 9000 |  | ||||||
|     volumes: |  | ||||||
|       - app:/app |  | ||||||
|     restart: always |  | ||||||
|  |  | ||||||
|   db: |  | ||||||
|     image: mariadb |  | ||||||
|     restart: always |  | ||||||
|     volumes: |  | ||||||
|       - db:/var/lib/mysql |  | ||||||
|     environment: |  | ||||||
|       MYSQL_USER: crater |  | ||||||
|       MYSQL_PASSWORD: crater |  | ||||||
|       MYSQL_DATABASE: crater |  | ||||||
|       MYSQL_ROOT_PASSWORD: crater |  | ||||||
|  |  | ||||||
| volumes: |  | ||||||
|   app: |  | ||||||
|   db: |  | ||||||
|  |  | ||||||
							
								
								
									
										50
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | version: '3.7' | ||||||
|  |  | ||||||
|  | services: | ||||||
|  |   app: | ||||||
|  |     build: | ||||||
|  |       args: | ||||||
|  |         user: crater-user | ||||||
|  |         uid: 1000 | ||||||
|  |       context: ./ | ||||||
|  |       dockerfile: Dockerfile | ||||||
|  |     image: crater-php | ||||||
|  |     restart: unless-stopped | ||||||
|  |     working_dir: /var/www/ | ||||||
|  |     volumes: | ||||||
|  |       - ./:/var/www | ||||||
|  |     networks: | ||||||
|  |       - crater | ||||||
|  |  | ||||||
|  |   db: | ||||||
|  |     image: mariadb | ||||||
|  |     restart: always | ||||||
|  |     volumes: | ||||||
|  |       - db:/var/lib/mysql | ||||||
|  |     environment: | ||||||
|  |       MYSQL_USER: crater | ||||||
|  |       MYSQL_PASSWORD: crater | ||||||
|  |       MYSQL_DATABASE: crater | ||||||
|  |       MYSQL_ROOT_PASSWORD: crater | ||||||
|  |     ports: | ||||||
|  |       - '33006:3306' | ||||||
|  |     networks: | ||||||
|  |       - crater | ||||||
|  |  | ||||||
|  |   nginx: | ||||||
|  |     image: nginx:1.17-alpine | ||||||
|  |     restart: unless-stopped | ||||||
|  |     ports: | ||||||
|  |       - 80:80 | ||||||
|  |     volumes: | ||||||
|  |       - ./:/var/www | ||||||
|  |       - ./docker-compose/nginx:/etc/nginx/conf.d/ | ||||||
|  |     networks: | ||||||
|  |       - crater | ||||||
|  |  | ||||||
|  | volumes: | ||||||
|  |   db: | ||||||
|  |  | ||||||
|  | networks: | ||||||
|  |   crater: | ||||||
|  |     driver: bridge | ||||||
							
								
								
									
										20
									
								
								docker-compose/nginx/nginx.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								docker-compose/nginx/nginx.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | server { | ||||||
|  |     listen 80; | ||||||
|  |     index index.php index.html; | ||||||
|  |     error_log  /var/log/nginx/error.log; | ||||||
|  |     access_log /var/log/nginx/access.log; | ||||||
|  |     root /var/www/public; | ||||||
|  |     location ~ \.php$ { | ||||||
|  |         try_files $uri =404; | ||||||
|  |         fastcgi_split_path_info ^(.+\.php)(/.+)$; | ||||||
|  |         fastcgi_pass app:9000; | ||||||
|  |         fastcgi_index index.php; | ||||||
|  |         include fastcgi_params; | ||||||
|  |         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||||||
|  |         fastcgi_param PATH_INFO $fastcgi_path_info; | ||||||
|  |     } | ||||||
|  |     location / { | ||||||
|  |         try_files $uri $uri/ /index.php?$query_string; | ||||||
|  |         gzip_static on; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								docker-compose/setup.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								docker-compose/setup.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | docker-compose exec app composer install --no-interaction --prefer-dist --optimize-autoloader | ||||||
|  |  | ||||||
|  | docker-compose exec app php artisan storage:link || true | ||||||
|  | docker-compose exec app php artisan key:generate | ||||||
|  | docker-compose exec app php artisan passport:keys || true | ||||||
							
								
								
									
										53
									
								
								nginx.conf
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								nginx.conf
									
									
									
									
									
								
							| @ -1,53 +0,0 @@ | |||||||
| worker_processes  8; |  | ||||||
|  |  | ||||||
| error_log  /var/log/nginx/error.log warn; |  | ||||||
| pid        /var/run/nginx.pid; |  | ||||||
|  |  | ||||||
| events { |  | ||||||
|     worker_connections  4096; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| http { |  | ||||||
|     include       /etc/nginx/mime.types; |  | ||||||
|     default_type  application/octet-stream; |  | ||||||
|  |  | ||||||
|     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' |  | ||||||
|                       '$status $body_bytes_sent "$http_referer" ' |  | ||||||
|                       '"$http_user_agent" "$http_x_forwarded_for"'; |  | ||||||
|  |  | ||||||
|     access_log  /var/log/nginx/access.log  main; |  | ||||||
|  |  | ||||||
|     sendfile        on; |  | ||||||
|  |  | ||||||
|     keepalive_timeout  65; |  | ||||||
|  |  | ||||||
|     server { |  | ||||||
|         listen 80 default_server; |  | ||||||
|  |  | ||||||
|         root /app/public; |  | ||||||
|         index index.php; |  | ||||||
|         charset utf-8; |  | ||||||
|  |  | ||||||
|         access_log off; |  | ||||||
|  |  | ||||||
|         location / { |  | ||||||
|             try_files $uri $uri/ /index.php?$query_string; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         location = /favicon.ico { access_log off; log_not_found off; } |  | ||||||
|         location = /robots.txt  { access_log off; log_not_found off; } |  | ||||||
|  |  | ||||||
|         add_header X-Content-Type-Options nosniff; |  | ||||||
|         add_header X-XSS-Protection "1; mode=block"; |  | ||||||
|         add_header X-Robots-Tag none; |  | ||||||
|         add_header Content-Security-Policy "frame-ancestors 'self'"; |  | ||||||
|  |  | ||||||
|         location ~ \.php$ { |  | ||||||
|             fastcgi_pass php:9000; |  | ||||||
|             fastcgi_index index.php; |  | ||||||
|             include fastcgi_params; |  | ||||||
|             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |  | ||||||
|             include /etc/nginx/fastcgi_params; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
							
								
								
									
										2
									
								
								public/assets/css/crater.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								public/assets/css/crater.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1,4 +1,4 @@ | |||||||
| { | { | ||||||
|     "/assets/js/app.js": "/assets/js/app.js?id=2521d0dcc4cb4e4975a5", |     "/assets/js/app.js": "/assets/js/app.js?id=3c9e7bf904dd1bcdf67f", | ||||||
|     "/assets/css/crater.css": "/assets/css/crater.css?id=84a4eeb53b0e6a937e44" |     "/assets/css/crater.css": "/assets/css/crater.css?id=f5a1617422acad8e44a1" | ||||||
| } | } | ||||||
|  | |||||||
| @ -63,6 +63,7 @@ Crater is a product of [Bytefury](https://bytefury.com) | |||||||
| **Special thanks to:** | **Special thanks to:** | ||||||
| * [Birkhoff Lee](https://github.com/BirkhoffLee) | * [Birkhoff Lee](https://github.com/BirkhoffLee) | ||||||
| * [Hassan A. Ba Abdullah](https://github.com/hsnapps) | * [Hassan A. Ba Abdullah](https://github.com/hsnapps) | ||||||
|  | * [Akaunting](https://github.com/akaunting/akaunting) | ||||||
|  |  | ||||||
| ## Translate | ## Translate | ||||||
| Help us translate or suggest changes to existing languages if you find any mistakes by creating a new PR.  | Help us translate or suggest changes to existing languages if you find any mistakes by creating a new PR.  | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ | |||||||
|       :readonly="readOnly" |       :readonly="readOnly" | ||||||
|       :name="name" |       :name="name" | ||||||
|       :tabindex="tabIndex" |       :tabindex="tabIndex" | ||||||
|       :class="[{'input-field-left-icon': icon && isAlignLeftIcon ,'input-field-right-icon': icon && !isAlignLeftIcon ,'invalid': isFieldValid, 'disabled': disabled, 'small-input': small}, inputClass]" |       :class="[{ 'input-field-left-icon': icon && isAlignLeftIcon, 'input-field-right-icon': (icon && !isAlignLeftIcon) || isInputGroup, invalid: isFieldValid, disabled: disabled, 'small-input': small}, inputClass]" | ||||||
|       :placeholder="placeholder" |       :placeholder="placeholder" | ||||||
|       :autocomplete="autocomplete" |       :autocomplete="autocomplete" | ||||||
|       class="input-field" |       class="input-field" | ||||||
| @ -23,6 +23,9 @@ | |||||||
|       <font-awesome-icon :icon="!showPass ?'eye': 'eye-slash'" class="right-icon" /> |       <font-awesome-icon :icon="!showPass ?'eye': 'eye-slash'" class="right-icon" /> | ||||||
|     </div> |     </div> | ||||||
|     <font-awesome-icon v-if="icon && !isAlignLeftIcon" :icon="icon" class="right-icon" /> |     <font-awesome-icon v-if="icon && !isAlignLeftIcon" :icon="icon" class="right-icon" /> | ||||||
|  |     <span v-if="isInputGroup" class="right-input-group-text"> | ||||||
|  |       {{ inputGroupText }} | ||||||
|  |     </span> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| @ -84,6 +87,14 @@ export default { | |||||||
|     showPassword: { |     showPassword: { | ||||||
|       type: Boolean, |       type: Boolean, | ||||||
|       default: false |       default: false | ||||||
|  |     }, | ||||||
|  |     isInputGroup: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false, | ||||||
|  |     }, | ||||||
|  |     inputGroupText: { | ||||||
|  |       type: String, | ||||||
|  |       default: null, | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   data () { |   data () { | ||||||
|  | |||||||
| @ -128,6 +128,14 @@ export default { | |||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   checkValidUrl(url) { |   checkValidUrl(url) { | ||||||
|  |     if ( | ||||||
|  |       url.includes('http://localhost') || | ||||||
|  |       url.includes('http://127.0.0.1') || | ||||||
|  |       url.includes('https://localhost') || | ||||||
|  |       url.includes('https://127.0.0.1') | ||||||
|  |     ) { | ||||||
|  |       return true | ||||||
|  |     } | ||||||
|     let pattern = new RegExp( |     let pattern = new RegExp( | ||||||
|       '^(https?:\\/\\/)?' + // protocol |       '^(https?:\\/\\/)?' + // protocol | ||||||
|       '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name |       '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name | ||||||
|  | |||||||
| @ -22,6 +22,11 @@ | |||||||
|     "to_date": "إلى تاريخ", |     "to_date": "إلى تاريخ", | ||||||
|     "from": "من", |     "from": "من", | ||||||
|     "to": "إلى", |     "to": "إلى", | ||||||
|  |     "sort_by": "ترتيب حسب", | ||||||
|  |     "ascending": "تصاعدي", | ||||||
|  |     "descending": "تنازلي", | ||||||
|  |     "subject": "موضوع", | ||||||
|  |     "message": "رسالة", | ||||||
|     "go_back": "إلى الخلف", |     "go_back": "إلى الخلف", | ||||||
|     "back_to_login": "العودة إلى تسجيل الدخول؟", |     "back_to_login": "العودة إلى تسجيل الدخول؟", | ||||||
|     "home": "الرئيسية", |     "home": "الرئيسية", | ||||||
| @ -112,8 +117,8 @@ | |||||||
|   "tax_types": { |   "tax_types": { | ||||||
|     "name": "الاسم", |     "name": "الاسم", | ||||||
|     "description": "الوصف", |     "description": "الوصف", | ||||||
|     "percent": "Percent", |     "percent": "نسبه مئويه", | ||||||
|     "compound_tax": "Compound Tax" |     "compound_tax": "الضريبة المركبة" | ||||||
|   }, |   }, | ||||||
|   "customers": { |   "customers": { | ||||||
|     "title": "العملاء", |     "title": "العملاء", | ||||||
| @ -329,6 +334,9 @@ | |||||||
|     "no_matching_invoices": "لا يوجد فواتير مطابقة!", |     "no_matching_invoices": "لا يوجد فواتير مطابقة!", | ||||||
|     "mark_as_sent_successfully": "تم تحديد الفاتورة كمرسلة بنجاح", |     "mark_as_sent_successfully": "تم تحديد الفاتورة كمرسلة بنجاح", | ||||||
|     "send_invoice_successfully": "تم إرسال الفاتورة بنجاح", |     "send_invoice_successfully": "تم إرسال الفاتورة بنجاح", | ||||||
|  |     "cloned_successfully": "تم استنساخ الفاتورة بنجاح", | ||||||
|  |     "clone_invoice": "استنساخ الفاتورة", | ||||||
|  |     "confirm_clone": "سيتم استنساخ هذه الفاتورة في فاتورة جديدة", | ||||||
|     "item": { |     "item": { | ||||||
|       "title": "اسم الصنف", |       "title": "اسم الصنف", | ||||||
|       "description": "الوصف", |       "description": "الوصف", | ||||||
| @ -660,7 +668,29 @@ | |||||||
|         "autogenerate_payment_number": "ترقيم آلي للمدفوعات", |         "autogenerate_payment_number": "ترقيم آلي للمدفوعات", | ||||||
|         "payment_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الدفعة تلقائيًا في كل مرة تقوم فيها بإنشاء دفعة جديدة.", |         "payment_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الدفعة تلقائيًا في كل مرة تقوم فيها بإنشاء دفعة جديدة.", | ||||||
|         "enter_payment_prefix": "أدخل بادئة رقم الدفعة", |         "enter_payment_prefix": "أدخل بادئة رقم الدفعة", | ||||||
|         "payment_setting_updated": "تم تحديث إعدادات الدفعة بنجاح" |         "payment_setting_updated": "تم تحديث إعدادات الدفعة بنجاح", | ||||||
|  |         "payment_mode": "طريقة الدفع", | ||||||
|  |         "add_payment_mode": "أضف وضع الدفع", | ||||||
|  |         "edit_payment_mode": "تحرير وضع الدفع", | ||||||
|  |         "mode_name": "اسم الوضع", | ||||||
|  |         "payment_mode_added": "تمت إضافة وضع الدفع", | ||||||
|  |         "payment_mode_updated": "تم تحديث وضع الدفع", | ||||||
|  |         "payment_mode_confirm_delete": "لن تتمكن من استعادة وضع الدفع هذا", | ||||||
|  |         "already_in_use": "وضع الدفع قيد الاستخدام بالفعل", | ||||||
|  |         "deleted_message": "تم حذف وضع الدفع بنجاح" | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       "items": { | ||||||
|  |         "title": "العناصر", | ||||||
|  |         "units": "الوحدات", | ||||||
|  |         "add_item_unit": "إضافة وحدة عنصر", | ||||||
|  |         "edit_item_unit": "تحرير وحدة العناصر", | ||||||
|  |         "unit_name": "إسم الوحدة", | ||||||
|  |         "item_unit_added": "تمت إضافة وحدة العنصر", | ||||||
|  |         "item_unit_updated": "تم تحديث وحدة العنصر", | ||||||
|  |         "item_unit_confirm_delete": "لن تتمكن من استرداد وحدة العنصر هذه", | ||||||
|  |         "already_in_use": "وحدة العنصر قيد الاستخدام بالفعل", | ||||||
|  |         "deleted_message": "تم حذف وحدة العنصر بنجاح" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "account_settings": { |     "account_settings": { | ||||||
| @ -695,6 +725,7 @@ | |||||||
|     "tax_types": { |     "tax_types": { | ||||||
|       "title": "أنواع الضرائب", |       "title": "أنواع الضرائب", | ||||||
|       "add_tax": "أضف ضريبة", |       "add_tax": "أضف ضريبة", | ||||||
|  |       "edit_tax": "تحرير الضريبة", | ||||||
|       "description": "يمكنك إضافة أو إزالة الضرائب كما يحلو لك. النظام يدعم الضرائب على العناصر الفردية وكذلك على الفاتورة.", |       "description": "يمكنك إضافة أو إزالة الضرائب كما يحلو لك. النظام يدعم الضرائب على العناصر الفردية وكذلك على الفاتورة.", | ||||||
|       "add_new_tax": "إضافة ضريبة جديدة", |       "add_new_tax": "إضافة ضريبة جديدة", | ||||||
|       "tax_settings": "إعدادات الضريبة", |       "tax_settings": "إعدادات الضريبة", | ||||||
| @ -715,6 +746,8 @@ | |||||||
|       "action": "إجراء", |       "action": "إجراء", | ||||||
|       "description": "الفئات مطلوبة لإضافة إدخالات النفقات. يمكنك إضافة أو إزالة هذه الفئات وفقًا لتفضيلاتك.", |       "description": "الفئات مطلوبة لإضافة إدخالات النفقات. يمكنك إضافة أو إزالة هذه الفئات وفقًا لتفضيلاتك.", | ||||||
|       "add_new_category": "إضافة فئة جديدة", |       "add_new_category": "إضافة فئة جديدة", | ||||||
|  |       "add_category": "إضافة فئة", | ||||||
|  |       "edit_category": "تحرير الفئة", | ||||||
|       "category_name": "اسم الفئة", |       "category_name": "اسم الفئة", | ||||||
|       "category_description": "الوصف", |       "category_description": "الوصف", | ||||||
|       "created_message": "تم إنشاء نوع النفقات بنجاح", |       "created_message": "تم إنشاء نوع النفقات بنجاح", | ||||||
|  | |||||||
| @ -424,6 +424,7 @@ | |||||||
|     "expenses_list": "Liste der Ausgaben", |     "expenses_list": "Liste der Ausgaben", | ||||||
|     "expense_title": "Titel", |     "expense_title": "Titel", | ||||||
|     "contact": "Kontakt", |     "contact": "Kontakt", | ||||||
|  |     "customer": "Kundin", | ||||||
|     "category": "Kategorie", |     "category": "Kategorie", | ||||||
|     "from_date": "Von Datum", |     "from_date": "Von Datum", | ||||||
|     "to_date": "bis Datum", |     "to_date": "bis Datum", | ||||||
| @ -668,6 +669,7 @@ | |||||||
|         "payment_setting_updated": "Zahlungseinstellung erfolgreich aktualisiert", |         "payment_setting_updated": "Zahlungseinstellung erfolgreich aktualisiert", | ||||||
|         "payment_mode": "Zahlungsmethode", |         "payment_mode": "Zahlungsmethode", | ||||||
|         "add_payment_mode": "Zahlungsmethode hinzufügen", |         "add_payment_mode": "Zahlungsmethode hinzufügen", | ||||||
|  |         "edit_payment_mode": "Zahlungsmodus bearbeiten", | ||||||
|         "mode_name": "Methodenname", |         "mode_name": "Methodenname", | ||||||
|         "payment_mode_added": "Zahlungsmethode hinzugefügt", |         "payment_mode_added": "Zahlungsmethode hinzugefügt", | ||||||
|         "payment_mode_updated": "Zahlungsmethode aktualisiert", |         "payment_mode_updated": "Zahlungsmethode aktualisiert", | ||||||
| @ -679,6 +681,7 @@ | |||||||
|         "title": "Artikel", |         "title": "Artikel", | ||||||
|         "units": "Einheiten", |         "units": "Einheiten", | ||||||
|         "add_item_unit": "Artikeleinheit hinzufügen", |         "add_item_unit": "Artikeleinheit hinzufügen", | ||||||
|  |         "edit_item_unit": "Elementeinheit bearbeiten", | ||||||
|         "unit_name": "Einheitname", |         "unit_name": "Einheitname", | ||||||
|         "item_unit_added": "Artikeleinheit hinzugefügt", |         "item_unit_added": "Artikeleinheit hinzugefügt", | ||||||
|         "item_unit_updated": "Artikeleinheit aktualisiert", |         "item_unit_updated": "Artikeleinheit aktualisiert", | ||||||
| @ -719,6 +722,7 @@ | |||||||
|     "tax_types": { |     "tax_types": { | ||||||
|       "title": "Steuersätze", |       "title": "Steuersätze", | ||||||
|       "add_tax": "Steuersätze hinzufügen", |       "add_tax": "Steuersätze hinzufügen", | ||||||
|  |       "edit_tax": "Steuer bearbeiten", | ||||||
|       "description": "Sie können Steuern nach Belieben hinzufügen oder entfernen. Crater unterstützt Steuern auf einzelne Artikel sowie auf die Rechnung.", |       "description": "Sie können Steuern nach Belieben hinzufügen oder entfernen. Crater unterstützt Steuern auf einzelne Artikel sowie auf die Rechnung.", | ||||||
|       "add_new_tax": "Neuen Steuersatz hinzufügen", |       "add_new_tax": "Neuen Steuersatz hinzufügen", | ||||||
|       "tax_settings": "Einstellungen Steuersatz", |       "tax_settings": "Einstellungen Steuersatz", | ||||||
| @ -739,6 +743,8 @@ | |||||||
|       "action": "Aktion", |       "action": "Aktion", | ||||||
|       "description": "Für das Hinzufügen von Ausgabeneinträgen sind Kategorien erforderlich. Sie können diese Kategorien nach Ihren Wünschen hinzufügen oder entfernen.", |       "description": "Für das Hinzufügen von Ausgabeneinträgen sind Kategorien erforderlich. Sie können diese Kategorien nach Ihren Wünschen hinzufügen oder entfernen.", | ||||||
|       "add_new_category": "Neue Kategorie hinzufügen", |       "add_new_category": "Neue Kategorie hinzufügen", | ||||||
|  |       "add_category": "Kategorie hinzufügen", | ||||||
|  |       "edit_category": "Kategorie bearbeiten", | ||||||
|       "category_name": "Kategorie Name", |       "category_name": "Kategorie Name", | ||||||
|       "category_description": "Beschreibung", |       "category_description": "Beschreibung", | ||||||
|       "created_message": "Ausgabenkategorie erfolgreich erstellt", |       "created_message": "Ausgabenkategorie erfolgreich erstellt", | ||||||
|  | |||||||
| @ -681,6 +681,7 @@ | |||||||
|         "payment_setting_updated": "Payment Setting updated successfully", |         "payment_setting_updated": "Payment Setting updated successfully", | ||||||
|         "payment_mode": "Payment Mode", |         "payment_mode": "Payment Mode", | ||||||
|         "add_payment_mode": "Add Payment Mode", |         "add_payment_mode": "Add Payment Mode", | ||||||
|  |         "edit_payment_mode": "Edit Payment Mode", | ||||||
|         "mode_name": "Mode Name", |         "mode_name": "Mode Name", | ||||||
|         "payment_mode_added": "Payment Mode Added", |         "payment_mode_added": "Payment Mode Added", | ||||||
|         "payment_mode_updated": "Payment Mode Updated", |         "payment_mode_updated": "Payment Mode Updated", | ||||||
| @ -693,6 +694,7 @@ | |||||||
|         "title": "Items", |         "title": "Items", | ||||||
|         "units": "units", |         "units": "units", | ||||||
|         "add_item_unit": "Add Item Unit", |         "add_item_unit": "Add Item Unit", | ||||||
|  |         "edit_item_unit": "Edit Item Unit", | ||||||
|         "unit_name": "Unit Name", |         "unit_name": "Unit Name", | ||||||
|         "item_unit_added": "Item Unit Added", |         "item_unit_added": "Item Unit Added", | ||||||
|         "item_unit_updated": "Item Unit Updated", |         "item_unit_updated": "Item Unit Updated", | ||||||
| @ -733,6 +735,7 @@ | |||||||
|     "tax_types": { |     "tax_types": { | ||||||
|       "title": "Tax Types", |       "title": "Tax Types", | ||||||
|       "add_tax": "Add Tax", |       "add_tax": "Add Tax", | ||||||
|  |       "edit_tax": "Edit Tax", | ||||||
|       "description": "You can add or Remove Taxes as you please. Crater supports Taxes on Individual Items as well as on the invoice.", |       "description": "You can add or Remove Taxes as you please. Crater supports Taxes on Individual Items as well as on the invoice.", | ||||||
|       "add_new_tax": "Add New Tax", |       "add_new_tax": "Add New Tax", | ||||||
|       "tax_settings": "Tax Settings", |       "tax_settings": "Tax Settings", | ||||||
| @ -753,6 +756,8 @@ | |||||||
|       "action": "Action", |       "action": "Action", | ||||||
|       "description": "Categories are required for adding expense entries. You can Add or Remove these categories according to your preference.", |       "description": "Categories are required for adding expense entries. You can Add or Remove these categories according to your preference.", | ||||||
|       "add_new_category": "Add New Category", |       "add_new_category": "Add New Category", | ||||||
|  |       "add_category": "Add Category", | ||||||
|  |       "edit_category": "Edit Category", | ||||||
|       "category_name": "Category Name", |       "category_name": "Category Name", | ||||||
|       "category_description": "Description", |       "category_description": "Description", | ||||||
|       "created_message": "Expense Category created successfully", |       "created_message": "Expense Category created successfully", | ||||||
|  | |||||||
| @ -22,6 +22,11 @@ | |||||||
|     "to_date": "Hasta la fecha", |     "to_date": "Hasta la fecha", | ||||||
|     "from": "De", |     "from": "De", | ||||||
|     "to": "A", |     "to": "A", | ||||||
|  |     "sort_by": "Ordenar por", | ||||||
|  |     "ascending": "Ascendente", | ||||||
|  |     "descending": "Descendente", | ||||||
|  |     "subject": "Sujeta", | ||||||
|  |     "message": "Mensaje", | ||||||
|     "go_back": "Volver", |     "go_back": "Volver", | ||||||
|     "back_to_login": "¿Volver al inicio de sesión?", |     "back_to_login": "¿Volver al inicio de sesión?", | ||||||
|     "home": "Inicio", |     "home": "Inicio", | ||||||
| @ -62,6 +67,8 @@ | |||||||
|     "four_zero_four": "404", |     "four_zero_four": "404", | ||||||
|     "you_got_lost": "Whoops! ¡Te perdiste!", |     "you_got_lost": "Whoops! ¡Te perdiste!", | ||||||
|     "go_home": "Volver al Inicio", |     "go_home": "Volver al Inicio", | ||||||
|  |     "test_mail_conf": "Probar configuración de correo", | ||||||
|  |     "send_mail_successfully": "El correo enviado con éxito", | ||||||
|     "setting_updated": "Configuración actualizada con éxito", |     "setting_updated": "Configuración actualizada con éxito", | ||||||
|     "select_state": "Seleccionar estado", |     "select_state": "Seleccionar estado", | ||||||
|     "select_country": "Seleccionar país", |     "select_country": "Seleccionar país", | ||||||
| @ -180,7 +187,7 @@ | |||||||
|     "no_items": "¡Aún no hay artículos!", |     "no_items": "¡Aún no hay artículos!", | ||||||
|     "list_of_items": "Esta sección contendrá la lista de artículos.", |     "list_of_items": "Esta sección contendrá la lista de artículos.", | ||||||
|     "select_a_unit": "seleccionar unidad", |     "select_a_unit": "seleccionar unidad", | ||||||
|  |     "taxes": "Impuestos", | ||||||
|     "item_attached_message": "No se puede eliminar un elemento que ya está en uso.", |     "item_attached_message": "No se puede eliminar un elemento que ya está en uso.", | ||||||
|     "confirm_delete": "No podrá recuperar este artículo | No podrás recuperar estos elementos", |     "confirm_delete": "No podrá recuperar este artículo | No podrás recuperar estos elementos", | ||||||
|     "created_message": "Artículo creado con éxito", |     "created_message": "Artículo creado con éxito", | ||||||
| @ -329,6 +336,9 @@ | |||||||
|     "no_matching_invoices": "¡No hay facturas coincidentes con la selección!", |     "no_matching_invoices": "¡No hay facturas coincidentes con la selección!", | ||||||
|     "mark_as_sent_successfully": "Factura marcada como enviada con éxito", |     "mark_as_sent_successfully": "Factura marcada como enviada con éxito", | ||||||
|     "send_invoice_successfully": "Factura enviada exitosamente", |     "send_invoice_successfully": "Factura enviada exitosamente", | ||||||
|  |     "cloned_successfully": "Factura clonada exitosamente", | ||||||
|  |     "clone_invoice": "Factura de clonación", | ||||||
|  |     "confirm_clone": "Esta factura se clonará en una nueva factura.", | ||||||
|     "item": { |     "item": { | ||||||
|       "title": "Título del artículo", |       "title": "Título del artículo", | ||||||
|       "description": "Descripción", |       "description": "Descripción", | ||||||
| @ -393,6 +403,7 @@ | |||||||
|     "edit_payment": "Editar pago", |     "edit_payment": "Editar pago", | ||||||
|     "view_payment": "Ver pago", |     "view_payment": "Ver pago", | ||||||
|     "add_new_payment": "Agregar nuevo pago", |     "add_new_payment": "Agregar nuevo pago", | ||||||
|  |     "send_payment_receipt": "Enviar recibo de pago", | ||||||
|     "save_payment": "Guardar pago", |     "save_payment": "Guardar pago", | ||||||
|     "update_payment": "Actualizar pago", |     "update_payment": "Actualizar pago", | ||||||
|     "payment": "Pago | Pagos", |     "payment": "Pago | Pagos", | ||||||
| @ -653,13 +664,35 @@ | |||||||
|       }, |       }, | ||||||
|  |  | ||||||
|       "payments": { |       "payments": { | ||||||
|         "title": "Payments", |         "title": "Pagos", | ||||||
|         "payment_prefix": "Prefijo de los pagos", |         "payment_prefix": "Prefijo de los pagos", | ||||||
|         "payment_settings": "Ajustes de pagos", |         "payment_settings": "Ajustes de pagos", | ||||||
|         "autogenerate_payment_number": "Autogenerar número de pago", |         "autogenerate_payment_number": "Autogenerar número de pago", | ||||||
|         "payment_setting_description": "Desactive esto, si no desea generar automáticamente números de pago cada vez que cree un nuevo pago.", |         "payment_setting_description": "Desactive esto, si no desea generar automáticamente números de pago cada vez que cree un nuevo pago.", | ||||||
|         "enter_payment_prefix": "Introduzca el prefijo de pago", |         "enter_payment_prefix": "Introduzca el prefijo de pago", | ||||||
|         "payment_setting_updated": "Configuración de pagos actualizada correctamente" |         "payment_setting_updated": "Configuración de pagos actualizada correctamente", | ||||||
|  |         "payment_mode": "Modo de pago", | ||||||
|  |         "add_payment_mode": "Agregar modo de pago", | ||||||
|  |         "edit_payment_mode": "Editar modo de pago", | ||||||
|  |         "mode_name": "Nombre del modo", | ||||||
|  |         "payment_mode_added": "Modo de pago agregado", | ||||||
|  |         "payment_mode_updated": "Modo de pago actualizado", | ||||||
|  |         "payment_mode_confirm_delete": "No podrá recuperar este modo de pago", | ||||||
|  |         "already_in_use": "El modo de pago ya está en uso", | ||||||
|  |         "deleted_message": "Modo de pago eliminado correctamente" | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       "items": { | ||||||
|  |         "title": "Artículos", | ||||||
|  |         "units": "unidades", | ||||||
|  |         "add_item_unit": "Agregar unidad de artículo", | ||||||
|  |         "edit_item_unit": "Editar unidad de artículo", | ||||||
|  |         "unit_name": "Nombre de la unidad", | ||||||
|  |         "item_unit_added": "Unidad de artículo agregada", | ||||||
|  |         "item_unit_updated": "Unidad de artículo actualizada", | ||||||
|  |         "item_unit_confirm_delete": "No podrás recuperar esta unidad de artículo", | ||||||
|  |         "already_in_use": "Unidad de artículo ya está en uso", | ||||||
|  |         "deleted_message": "Unidad de elemento eliminada correctamente" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "account_settings": { |     "account_settings": { | ||||||
| @ -694,6 +727,7 @@ | |||||||
|     "tax_types": { |     "tax_types": { | ||||||
|       "title": "Tipos de impuestos", |       "title": "Tipos de impuestos", | ||||||
|       "add_tax": "Agregar impuesto", |       "add_tax": "Agregar impuesto", | ||||||
|  |       "edit_tax": "Editar impuesto", | ||||||
|       "description": "Puede agregar o eliminar impuestos a su gusto. Crater admite impuestos sobre artículos individuales, así como sobre la factura.", |       "description": "Puede agregar o eliminar impuestos a su gusto. Crater admite impuestos sobre artículos individuales, así como sobre la factura.", | ||||||
|       "add_new_tax": "Agregar nuevo impuesto", |       "add_new_tax": "Agregar nuevo impuesto", | ||||||
|       "tax_settings": "Configuraciones de impuestos", |       "tax_settings": "Configuraciones de impuestos", | ||||||
| @ -714,6 +748,8 @@ | |||||||
|       "action": "Acción", |       "action": "Acción", | ||||||
|       "description": "Se requieren categorías para agregar entradas de gastos. Puede Agregar o Eliminar estas categorías según su preferencia.", |       "description": "Se requieren categorías para agregar entradas de gastos. Puede Agregar o Eliminar estas categorías según su preferencia.", | ||||||
|       "add_new_category": "Añadir nueva categoria", |       "add_new_category": "Añadir nueva categoria", | ||||||
|  |       "add_category": "Añadir categoría", | ||||||
|  |       "edit_category": "Editar categoria", | ||||||
|       "category_name": "nombre de la categoría", |       "category_name": "nombre de la categoría", | ||||||
|       "category_description": "Descripción", |       "category_description": "Descripción", | ||||||
|       "created_message": "Categoría de gastos creada con éxito", |       "created_message": "Categoría de gastos creada con éxito", | ||||||
|  | |||||||
| @ -193,7 +193,7 @@ | |||||||
|     "no_items": "Aucun article pour le moment!", |     "no_items": "Aucun article pour le moment!", | ||||||
|     "list_of_items": "Cette section contiendra la liste des éléments.", |     "list_of_items": "Cette section contiendra la liste des éléments.", | ||||||
|     "select_a_unit": "Sélectionnez l'unité", |     "select_a_unit": "Sélectionnez l'unité", | ||||||
|  |     "taxes": "Les taxes", | ||||||
|     "item_attached_message": "Impossible de supprimer un élément déjà utilisé", |     "item_attached_message": "Impossible de supprimer un élément déjà utilisé", | ||||||
|     "confirm_delete": "Vous ne pourrez pas récupérer cet article | Vous ne pourrez pas récupérer ces objets", |     "confirm_delete": "Vous ne pourrez pas récupérer cet article | Vous ne pourrez pas récupérer ces objets", | ||||||
|     "created_message": "Article créé avec succès", |     "created_message": "Article créé avec succès", | ||||||
| @ -683,6 +683,7 @@ | |||||||
|         "payment_setting_updated": "Les paramètres de paiement ont bien été mis à jour", |         "payment_setting_updated": "Les paramètres de paiement ont bien été mis à jour", | ||||||
|         "payment_mode": "Mode de paiement", |         "payment_mode": "Mode de paiement", | ||||||
|         "add_payment_mode": "Ajouter un mode de paiement", |         "add_payment_mode": "Ajouter un mode de paiement", | ||||||
|  |         "edit_payment_mode": "Modifier le mode de paiement", | ||||||
|         "mode_name": "Nom", |         "mode_name": "Nom", | ||||||
|         "payment_mode_added": "Mode de paiement ajouté", |         "payment_mode_added": "Mode de paiement ajouté", | ||||||
|         "payment_mode_updated": "Mode de paiement mis à jour", |         "payment_mode_updated": "Mode de paiement mis à jour", | ||||||
| @ -695,6 +696,7 @@ | |||||||
|         "title": "Articles", |         "title": "Articles", | ||||||
|         "units": "Unités", |         "units": "Unités", | ||||||
|         "add_item_unit": "Ajouter une unité", |         "add_item_unit": "Ajouter une unité", | ||||||
|  |         "edit_item_unit": "Modifier l'unité d'élément", | ||||||
|         "unit_name": "Nom", |         "unit_name": "Nom", | ||||||
|         "item_unit_added": "Unité ajouté", |         "item_unit_added": "Unité ajouté", | ||||||
|         "item_unit_updated": "Unité mis à jour", |         "item_unit_updated": "Unité mis à jour", | ||||||
| @ -737,6 +739,7 @@ | |||||||
|     "tax_types": { |     "tax_types": { | ||||||
|       "title": "Types de taxe", |       "title": "Types de taxe", | ||||||
|       "add_tax": "Ajouter une taxe", |       "add_tax": "Ajouter une taxe", | ||||||
|  |       "edit_tax": "Modifier la taxe", | ||||||
|       "description": "Vous pouvez ajouter ou supprimer des taxes à votre guise. Crater prend en charge les taxes sur les articles individuels ainsi que sur la facture.", |       "description": "Vous pouvez ajouter ou supprimer des taxes à votre guise. Crater prend en charge les taxes sur les articles individuels ainsi que sur la facture.", | ||||||
|       "add_new_tax": "Ajouter une nouvelle taxe", |       "add_new_tax": "Ajouter une nouvelle taxe", | ||||||
|       "tax_settings": "Paramètres de taxe", |       "tax_settings": "Paramètres de taxe", | ||||||
| @ -757,6 +760,8 @@ | |||||||
|       "action": "action", |       "action": "action", | ||||||
|       "description": "Des catégories sont requises pour ajouter des entrées de dépenses. Vous pouvez ajouter ou supprimer ces catégories selon vos préférences.", |       "description": "Des catégories sont requises pour ajouter des entrées de dépenses. Vous pouvez ajouter ou supprimer ces catégories selon vos préférences.", | ||||||
|       "add_new_category": "Ajouter une nouvelle catégorie", |       "add_new_category": "Ajouter une nouvelle catégorie", | ||||||
|  |       "add_category": "Adicionar categoria", | ||||||
|  |       "edit_category": "Editar categoria", | ||||||
|       "category_name": "Nom de catégorie", |       "category_name": "Nom de catégorie", | ||||||
|       "category_description": "Description", |       "category_description": "Description", | ||||||
|       "created_message": "Catégorie de dépenses créée avec succès", |       "created_message": "Catégorie de dépenses créée avec succès", | ||||||
|  | |||||||
| @ -430,6 +430,7 @@ | |||||||
|     "expense_title": "Titolo", |     "expense_title": "Titolo", | ||||||
|     "contact": "Contatto", |     "contact": "Contatto", | ||||||
|     "category": "Categoria", |     "category": "Categoria", | ||||||
|  |     "customer": "Cliente", | ||||||
|     "from_date": "Dalla Data", |     "from_date": "Dalla Data", | ||||||
|     "to_date": "Alla Data", |     "to_date": "Alla Data", | ||||||
|     "expense_date": "Data", |     "expense_date": "Data", | ||||||
| @ -677,6 +678,7 @@ | |||||||
|         "payment_setting_updated": "Impostazioni di pagamento aggiornate con successo", |         "payment_setting_updated": "Impostazioni di pagamento aggiornate con successo", | ||||||
|         "payment_mode": "Modalità di pagamento", |         "payment_mode": "Modalità di pagamento", | ||||||
|         "add_payment_mode": "Aggiungi modalità di pagamento", |         "add_payment_mode": "Aggiungi modalità di pagamento", | ||||||
|  |         "edit_payment_mode": "Modifica modalità di pagamento", | ||||||
|         "mode_name": "Nome modalità", |         "mode_name": "Nome modalità", | ||||||
|         "payment_mode_added": "Modalità di pagamento aggiunta", |         "payment_mode_added": "Modalità di pagamento aggiunta", | ||||||
|         "payment_mode_updated": "Modalità di pagamento aggiornata", |         "payment_mode_updated": "Modalità di pagamento aggiornata", | ||||||
| @ -689,6 +691,7 @@ | |||||||
|         "title": "Items", |         "title": "Items", | ||||||
|         "units": "unità", |         "units": "unità", | ||||||
|         "add_item_unit": "Aggiungi Unità Item", |         "add_item_unit": "Aggiungi Unità Item", | ||||||
|  |         "edit_item_unit": "Modifica unità articolo", | ||||||
|         "unit_name": "Nome", |         "unit_name": "Nome", | ||||||
|         "item_unit_added": "Unità aggiunta", |         "item_unit_added": "Unità aggiunta", | ||||||
|         "item_unit_updated": "Unità aggiornata", |         "item_unit_updated": "Unità aggiornata", | ||||||
| @ -729,6 +732,7 @@ | |||||||
|     "tax_types": { |     "tax_types": { | ||||||
|       "title": "Tipi di Imposta", |       "title": "Tipi di Imposta", | ||||||
|       "add_tax": "Aggiungi Imposta", |       "add_tax": "Aggiungi Imposta", | ||||||
|  |       "edit_tax": "Modifica imposta", | ||||||
|       "description": "Puoi aggiongere e rimuovere imposte a piacimento. Vengono supportate Tasse differenti per prodotti/servizi specifici esattamento come per le fatture.", |       "description": "Puoi aggiongere e rimuovere imposte a piacimento. Vengono supportate Tasse differenti per prodotti/servizi specifici esattamento come per le fatture.", | ||||||
|       "add_new_tax": "Aggiungi nuova imposta", |       "add_new_tax": "Aggiungi nuova imposta", | ||||||
|       "tax_settings": "Impostazioni Imposte", |       "tax_settings": "Impostazioni Imposte", | ||||||
| @ -749,6 +753,8 @@ | |||||||
|       "action": "Azione", |       "action": "Azione", | ||||||
|       "description": "Le categorie sono necessarie per aggiungere delle voci di spesa. Puoi aggiungere o eliminare queste categorie in base alle tue preferenze.", |       "description": "Le categorie sono necessarie per aggiungere delle voci di spesa. Puoi aggiungere o eliminare queste categorie in base alle tue preferenze.", | ||||||
|       "add_new_category": "Aggiungi nuova categoria", |       "add_new_category": "Aggiungi nuova categoria", | ||||||
|  |       "add_category": "Aggiungi categoria", | ||||||
|  |       "edit_category": "Modifica categoria", | ||||||
|       "category_name": "Nome Categoria", |       "category_name": "Nome Categoria", | ||||||
|       "category_description": "Descrizione", |       "category_description": "Descrizione", | ||||||
|       "created_message": "Categoria di spesa creata con successo", |       "created_message": "Categoria di spesa creata con successo", | ||||||
|  | |||||||
| @ -17,11 +17,17 @@ | |||||||
|     "save": "Salvar", |     "save": "Salvar", | ||||||
|     "cancel": "Cancelar", |     "cancel": "Cancelar", | ||||||
|     "update": "Atualizar", |     "update": "Atualizar", | ||||||
|  |     "deselect": "Desmarcar", | ||||||
|     "download": "Baixar", |     "download": "Baixar", | ||||||
|     "from_date": "A partir da Data", |     "from_date": "A partir da Data", | ||||||
|     "to_date": "Até a Data", |     "to_date": "Até a Data", | ||||||
|     "from": "De", |     "from": "De", | ||||||
|     "to": "Para", |     "to": "Para", | ||||||
|  |     "sort_by": "Ordenar por", | ||||||
|  |     "ascending": "Crescente", | ||||||
|  |     "descending": "Descendente", | ||||||
|  |     "subject": "Sujeita", | ||||||
|  |     "message": "Mensagem", | ||||||
|     "go_back": "Voltar", |     "go_back": "Voltar", | ||||||
|     "back_to_login": "Voltar ao Login", |     "back_to_login": "Voltar ao Login", | ||||||
|     "home": "Home", |     "home": "Home", | ||||||
| @ -62,6 +68,8 @@ | |||||||
|     "four_zero_four": "404", |     "four_zero_four": "404", | ||||||
|     "you_got_lost": "Ops! Se perdeu!", |     "you_got_lost": "Ops! Se perdeu!", | ||||||
|     "go_home": "Ir para Home", |     "go_home": "Ir para Home", | ||||||
|  |     "test_mail_conf": "Testar configuração de email", | ||||||
|  |     "send_mail_successfully": "Correio enviado com sucesso", | ||||||
|     "setting_updated": "Configuração atualizada com sucesso", |     "setting_updated": "Configuração atualizada com sucesso", | ||||||
|     "select_state": "Selecione Estado", |     "select_state": "Selecione Estado", | ||||||
|     "select_country": "Selecionar pais", |     "select_country": "Selecionar pais", | ||||||
| @ -180,7 +188,7 @@ | |||||||
|     "no_items": "Ainda não existe itens", |     "no_items": "Ainda não existe itens", | ||||||
|     "list_of_items": "Esta seção conterá a lista de itens.", |     "list_of_items": "Esta seção conterá a lista de itens.", | ||||||
|     "select_a_unit": "Seleciona unidade", |     "select_a_unit": "Seleciona unidade", | ||||||
|  |     "taxes": "Impostos", | ||||||
|     "item_attached_message": "Não é possível excluir um item que já está em uso.", |     "item_attached_message": "Não é possível excluir um item que já está em uso.", | ||||||
|     "confirm_delete": "Você não poderá recuperar este item | Você não poderá recuperar esses itens", |     "confirm_delete": "Você não poderá recuperar este item | Você não poderá recuperar esses itens", | ||||||
|     "created_message": "Item criado com sucesso", |     "created_message": "Item criado com sucesso", | ||||||
| @ -329,6 +337,9 @@ | |||||||
|     "no_matching_invoices": "Não há faturas correspondentes!", |     "no_matching_invoices": "Não há faturas correspondentes!", | ||||||
|     "mark_as_sent_successfully": "Fatura marcada como enviada com sucesso", |     "mark_as_sent_successfully": "Fatura marcada como enviada com sucesso", | ||||||
|     "send_invoice_successfully": "Fatura enviada com sucesso", |     "send_invoice_successfully": "Fatura enviada com sucesso", | ||||||
|  |     "cloned_successfully": "Fatura clonada com sucesso", | ||||||
|  |     "clone_invoice": "Clonar fatura", | ||||||
|  |     "confirm_clone": "Esta fatura será clonada em uma nova fatura", | ||||||
|     "item": { |     "item": { | ||||||
|       "title": "Titulo do Item", |       "title": "Titulo do Item", | ||||||
|       "description": "Descrição", |       "description": "Descrição", | ||||||
| @ -394,6 +405,7 @@ | |||||||
|     "edit_payment": "Editar Pagamento", |     "edit_payment": "Editar Pagamento", | ||||||
|     "view_payment": "Ver Pagamento", |     "view_payment": "Ver Pagamento", | ||||||
|     "add_new_payment": "Adicionar novo Pagamento", |     "add_new_payment": "Adicionar novo Pagamento", | ||||||
|  |     "send_payment_receipt": "Enviar recibo de pagamento", | ||||||
|     "save_payment": "Salvar Pagamento", |     "save_payment": "Salvar Pagamento", | ||||||
|     "update_payment": "Atualizar Pagamento", |     "update_payment": "Atualizar Pagamento", | ||||||
|     "payment": "Pagamento | Pagamentos", |     "payment": "Pagamento | Pagamentos", | ||||||
| @ -659,7 +671,28 @@ | |||||||
|         "autogenerate_payment_number": "Gerar automaticamente número do Pagamento", |         "autogenerate_payment_number": "Gerar automaticamente número do Pagamento", | ||||||
|         "payment_setting_description": "Desative isso, se você não deseja gerar automaticamente números do Pagamento sempre que criar um novo.", |         "payment_setting_description": "Desative isso, se você não deseja gerar automaticamente números do Pagamento sempre que criar um novo.", | ||||||
|         "enter_payment_prefix": "Digite o Prefixo do Pagamento", |         "enter_payment_prefix": "Digite o Prefixo do Pagamento", | ||||||
|         "payment_setting_updated": "Configurações de Pagamento atualizada com sucesso" |         "payment_setting_updated": "Configurações de Pagamento atualizada com sucesso", | ||||||
|  |         "payment_mode": "Modo de pagamento", | ||||||
|  |         "add_payment_mode": "Adicionar modo de pagamento", | ||||||
|  |         "edit_payment_mode": "Editar modo de pagamento", | ||||||
|  |         "mode_name": "Nome do modo", | ||||||
|  |         "payment_mode_added": "Modo de pagamento adicionado", | ||||||
|  |         "payment_mode_updated": "Modo de pagamento atualizado", | ||||||
|  |         "payment_mode_confirm_delete": "Você não poderá recuperar este modo de pagamento", | ||||||
|  |         "already_in_use": "O modo de pagamento já está em uso", | ||||||
|  |         "deleted_message": "Modo de pagamento excluído com sucesso" | ||||||
|  |       }, | ||||||
|  |       "items": { | ||||||
|  |         "title": "Itens", | ||||||
|  |         "units": "unidades", | ||||||
|  |         "add_item_unit": "Adicionar unidade de item", | ||||||
|  |         "edit_item_unit": "Editar unidade de item", | ||||||
|  |         "unit_name": "Nome da unidade", | ||||||
|  |         "item_unit_added": "Item Unit Added", | ||||||
|  |         "item_unit_updated": "Item Unit Updated", | ||||||
|  |         "item_unit_confirm_delete": "Você não poderá recuperar esta unidade de item", | ||||||
|  |         "already_in_use": "A unidade do item já está em uso", | ||||||
|  |         "deleted_message": "Unidade de item excluída com sucesso" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "account_settings": { |     "account_settings": { | ||||||
| @ -694,6 +727,7 @@ | |||||||
|     "tax_types": { |     "tax_types": { | ||||||
|       "title": "Tipos de Impostos", |       "title": "Tipos de Impostos", | ||||||
|       "add_tax": "Adicionar Imposto", |       "add_tax": "Adicionar Imposto", | ||||||
|  |       "edit_tax": "Editar imposto", | ||||||
|       "description": "Você pode adicionar ou remover impostos conforme desejar. O Crater suporta impostos sobre itens individuais e também na Fatura.", |       "description": "Você pode adicionar ou remover impostos conforme desejar. O Crater suporta impostos sobre itens individuais e também na Fatura.", | ||||||
|       "add_new_tax": "Adicionar Novo Imposto", |       "add_new_tax": "Adicionar Novo Imposto", | ||||||
|       "tax_settings": "Configurações de Impostos", |       "tax_settings": "Configurações de Impostos", | ||||||
| @ -714,6 +748,8 @@ | |||||||
|       "action": "Ação", |       "action": "Ação", | ||||||
|       "description": "As Categorias são necessárias para adicionar entradas de Despesas. Você pode adicionar ou remover essas Categorias de acordo com sua preferência.", |       "description": "As Categorias são necessárias para adicionar entradas de Despesas. Você pode adicionar ou remover essas Categorias de acordo com sua preferência.", | ||||||
|       "add_new_category": "Adicionar Nova Categoria", |       "add_new_category": "Adicionar Nova Categoria", | ||||||
|  |       "add_category": "Adicionar categoria", | ||||||
|  |       "edit_category": "Editar categoria", | ||||||
|       "category_name": "Nome da Categoria", |       "category_name": "Nome da Categoria", | ||||||
|       "category_description": "Descrição", |       "category_description": "Descrição", | ||||||
|       "created_message": "Categoria de Despesa criada com sucesso", |       "created_message": "Categoria de Despesa criada com sucesso", | ||||||
|  | |||||||
| @ -38,6 +38,8 @@ | |||||||
|               <base-input |               <base-input | ||||||
|                 v-model="item.quantity" |                 v-model="item.quantity" | ||||||
|                 :invalid="$v.item.quantity.$error" |                 :invalid="$v.item.quantity.$error" | ||||||
|  |                 :is-input-group="!!item.unit_name" | ||||||
|  |                 :input-group-text="item.unit_name" | ||||||
|                 type="text" |                 type="text" | ||||||
|                 small |                 small | ||||||
|                 @keyup="updateItem" |                 @keyup="updateItem" | ||||||
| @ -378,6 +380,7 @@ export default { | |||||||
|       this.item.price = item.price |       this.item.price = item.price | ||||||
|       this.item.item_id = item.id |       this.item.item_id = item.id | ||||||
|       this.item.description = item.description |       this.item.description = item.description | ||||||
|  |       this.item.unit_name = item.unit_name | ||||||
|       if (this.taxPerItem === 'YES' && item.taxes) { |       if (this.taxPerItem === 'YES' && item.taxes) { | ||||||
|         let index = 0 |         let index = 0 | ||||||
|         item.taxes.forEach(tax => { |         item.taxes.forEach(tax => { | ||||||
|  | |||||||
| @ -138,7 +138,7 @@ export default { | |||||||
|     openItemModal () { |     openItemModal () { | ||||||
|       this.$emit('onSelectItem') |       this.$emit('onSelectItem') | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Add Item', |         'title': this.$t('items.add_item'), | ||||||
|         'componentName': 'ItemModal', |         'componentName': 'ItemModal', | ||||||
|         'data': {taxPerItem: this.taxPerItem, taxes: this.taxes} |         'data': {taxPerItem: this.taxPerItem, taxes: this.taxes} | ||||||
|       }) |       }) | ||||||
|  | |||||||
| @ -38,6 +38,8 @@ | |||||||
|               <base-input |               <base-input | ||||||
|                 v-model="item.quantity" |                 v-model="item.quantity" | ||||||
|                 :invalid="$v.item.quantity.$error" |                 :invalid="$v.item.quantity.$error" | ||||||
|  |                 :is-input-group="!!item.unit_name" | ||||||
|  |                 :input-group-text="item.unit_name" | ||||||
|                 type="text" |                 type="text" | ||||||
|                 small |                 small | ||||||
|                 @keyup="updateItem" |                 @keyup="updateItem" | ||||||
| @ -379,6 +381,7 @@ export default { | |||||||
|       this.item.price = item.price |       this.item.price = item.price | ||||||
|       this.item.item_id = item.id |       this.item.item_id = item.id | ||||||
|       this.item.description = item.description |       this.item.description = item.description | ||||||
|  |       this.item.unit_name = item.unit_name | ||||||
|       if (this.taxPerItem === 'YES' && item.taxes) { |       if (this.taxPerItem === 'YES' && item.taxes) { | ||||||
|         let index = 0 |         let index = 0 | ||||||
|         item.taxes.forEach(tax => { |         item.taxes.forEach(tax => { | ||||||
|  | |||||||
| @ -127,7 +127,7 @@ export default { | |||||||
|     openItemModal () { |     openItemModal () { | ||||||
|       this.$emit('onSelectItem') |       this.$emit('onSelectItem') | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Add Item', |         'title': this.$t('items.add_item'), | ||||||
|         'componentName': 'ItemModal', |         'componentName': 'ItemModal', | ||||||
|         'data': {taxPerItem: this.taxPerItem, taxes: this.taxes} |         'data': {taxPerItem: this.taxPerItem, taxes: this.taxes} | ||||||
|       }) |       }) | ||||||
|  | |||||||
| @ -266,7 +266,7 @@ export default { | |||||||
|     }, |     }, | ||||||
|     async addItemUnit () { |     async addItemUnit () { | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Add Item Unit', |         'title': this.$t('settings.customization.items.add_item_unit'), | ||||||
|         'componentName': 'ItemUnit' |         'componentName': 'ItemUnit' | ||||||
|       }) |       }) | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -305,7 +305,7 @@ export default { | |||||||
|     }, |     }, | ||||||
|     async addPaymentMode () { |     async addPaymentMode () { | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Add Payment Mode', |         'title': this.$t('settings.customization.payments.add_payment_mode'), | ||||||
|         'componentName': 'PaymentMode' |         'componentName': 'PaymentMode' | ||||||
|       }) |       }) | ||||||
|     }, |     }, | ||||||
|  | |||||||
| @ -403,14 +403,14 @@ export default { | |||||||
|     }, |     }, | ||||||
|     async addItemUnit () { |     async addItemUnit () { | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Add Item Unit', |         'title': this.$t('settings.customization.items.add_item_unit'), | ||||||
|         'componentName': 'ItemUnit' |         'componentName': 'ItemUnit' | ||||||
|       }) |       }) | ||||||
|       this.$refs.itemTable.refresh() |       this.$refs.itemTable.refresh() | ||||||
|     }, |     }, | ||||||
|     async editItemUnit (data) { |     async editItemUnit (data) { | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Edit Item Unit', |         'title': this.$t('settings.customization.items.edit_item_unit'), | ||||||
|         'componentName': 'ItemUnit', |         'componentName': 'ItemUnit', | ||||||
|         'id': data.id, |         'id': data.id, | ||||||
|         'data': data |         'data': data | ||||||
| @ -439,14 +439,14 @@ export default { | |||||||
|     }, |     }, | ||||||
|     async addPaymentMode () { |     async addPaymentMode () { | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Add Payment Mode', |         'title': this.$t('settings.customization.payments.add_payment_mode'), | ||||||
|         'componentName': 'PaymentMode' |         'componentName': 'PaymentMode' | ||||||
|       }) |       }) | ||||||
|       this.$refs.table.refresh() |       this.$refs.table.refresh() | ||||||
|     }, |     }, | ||||||
|     async editPaymentMode (data) { |     async editPaymentMode (data) { | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Edit Payment Mode', |         'title': this.$t('settings.customization.payments.edit_payment_mode'), | ||||||
|         'componentName': 'PaymentMode', |         'componentName': 'PaymentMode', | ||||||
|         'id': data.id, |         'id': data.id, | ||||||
|         'data': data |         'data': data | ||||||
|  | |||||||
| @ -121,7 +121,7 @@ export default { | |||||||
|     }, |     }, | ||||||
|     openCategoryModal () { |     openCategoryModal () { | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Add Category', |         'title': this.$t('settings.expense_category.add_category'), | ||||||
|         'componentName': 'CategoryModal' |         'componentName': 'CategoryModal' | ||||||
|       }) |       }) | ||||||
|       this.$refs.table.refresh() |       this.$refs.table.refresh() | ||||||
| @ -129,7 +129,7 @@ export default { | |||||||
|     async EditCategory (id) { |     async EditCategory (id) { | ||||||
|       let response = await this.fetchCategory(id) |       let response = await this.fetchCategory(id) | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Edit Category', |         'title': this.$t('settings.expense_category.edit_category'), | ||||||
|         'componentName': 'CategoryModal', |         'componentName': 'CategoryModal', | ||||||
|         'id': id, |         'id': id, | ||||||
|         'data': response.data.category |         'data': response.data.category | ||||||
|  | |||||||
| @ -183,7 +183,7 @@ export default { | |||||||
|     async EditTax (id) { |     async EditTax (id) { | ||||||
|       let response = await this.fetchTaxType(id) |       let response = await this.fetchTaxType(id) | ||||||
|       this.openModal({ |       this.openModal({ | ||||||
|         'title': 'Edit Tax', |         'title': this.$t('settings.tax_types.edit_tax'), | ||||||
|         'componentName': 'TaxTypeModal', |         'componentName': 'TaxTypeModal', | ||||||
|         'id': id, |         'id': id, | ||||||
|         'data': response.data.taxType |         'data': response.data.taxType | ||||||
|  | |||||||
| @ -18,6 +18,22 @@ | |||||||
|         transform: translate(-50%,-50%); |         transform: translate(-50%,-50%); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     .right-input-group-text { | ||||||
|  |         position: absolute; | ||||||
|  |         width: 13px; | ||||||
|  |         height: 18px; | ||||||
|  |         min-width: 18px; | ||||||
|  |         color: $ls-color-gray; | ||||||
|  |         font-style: normal; | ||||||
|  |         font-weight: 900; | ||||||
|  |         font-size: 14px; | ||||||
|  |         line-height: 16px; | ||||||
|  |         top: 50%; | ||||||
|  |         right: 0px; | ||||||
|  |         z-index: 1; | ||||||
|  |         transform: translate(-50%, -50%); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     .right-icon { |     .right-icon { | ||||||
|         position: absolute; |         position: absolute; | ||||||
|         width: 13px; |         width: 13px; | ||||||
|  | |||||||
| @ -16,7 +16,7 @@ | |||||||
|     {{-- Subcopy --}} |     {{-- Subcopy --}} | ||||||
|     @slot('subcopy') |     @slot('subcopy') | ||||||
|         @component('mail::subcopy') |         @component('mail::subcopy') | ||||||
|             You have received a new estimate from <span class="company-name">{{$data['company']['name']}}</span> |             You have received a new estimate from <b>{{$data['company']['name']}}</b> | ||||||
|             @component('mail::button', ['url' => url('/customer/estimates/pdf/'.$data['estimate']['unique_hash'])]) |             @component('mail::button', ['url' => url('/customer/estimates/pdf/'.$data['estimate']['unique_hash'])]) | ||||||
|                 View Estimate |                 View Estimate | ||||||
|             @endcomponent |             @endcomponent | ||||||
|  | |||||||
| @ -16,7 +16,7 @@ | |||||||
|     {{-- Subcopy --}} |     {{-- Subcopy --}} | ||||||
|     @slot('subcopy') |     @slot('subcopy') | ||||||
|         @component('mail::subcopy') |         @component('mail::subcopy') | ||||||
|             You have received a new invoice from <span class="company-name">{{$data['company']['name']}}</span> |             You have received a new invoice from <b>{{$data['company']['name']}}</b> | ||||||
|             @component('mail::button', ['url' => url('/customer/invoices/pdf/'.$data['invoice']['unique_hash'])]) |             @component('mail::button', ['url' => url('/customer/invoices/pdf/'.$data['invoice']['unique_hash'])]) | ||||||
|                 View Invoice |                 View Invoice | ||||||
|             @endcomponent |             @endcomponent | ||||||
|  | |||||||
| @ -16,7 +16,7 @@ | |||||||
|     {{-- Subcopy --}} |     {{-- Subcopy --}} | ||||||
|     @slot('subcopy') |     @slot('subcopy') | ||||||
|         @component('mail::subcopy') |         @component('mail::subcopy') | ||||||
|             You have received a new payment from <span class="company-name">{{$data['company']['name']}}</span> |             You have received a new payment from <b>{{$data['company']['name']}}</b> | ||||||
|             @component('mail::button', ['url' => url('/payments/pdf/'.$data['payment']['unique_hash'])]) |             @component('mail::button', ['url' => url('/payments/pdf/'.$data['payment']['unique_hash'])]) | ||||||
|                 View Payment |                 View Payment | ||||||
|             @endcomponent |             @endcomponent | ||||||
|  | |||||||
| @ -158,8 +158,6 @@ img { | |||||||
| } | } | ||||||
|  |  | ||||||
| .subcopy p { | .subcopy p { | ||||||
|     display: flex; |  | ||||||
|     justify-content: center; |  | ||||||
|     text-align: center; |     text-align: center; | ||||||
|     font-size: 20px; |     font-size: 20px; | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	