mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-28 20:21:10 -04:00 
			
		
		
		
	Compare commits
	
		
			89 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f4a4c05b61 | |||
| 24637bff4a | |||
| 887ad9a73d | |||
| 339099bd34 | |||
| 9b9761aa5a | |||
| 00c917853c | |||
| 122c4f478f | |||
| edc0e115e4 | |||
| b388e7a237 | |||
| 6e3ed9b4f6 | |||
| 338dbb26a1 | |||
| f10e5e9d11 | |||
| 3a046b638c | |||
| 36242c516a | |||
| c8843eb544 | |||
| 37f2b6dfc7 | |||
| c90c14312a | |||
| b5b861bb36 | |||
| ab041743a2 | |||
| 9bcec9bd75 | |||
| f4ca6d4b73 | |||
| 66649590e5 | |||
| 1e8cc475ca | |||
| 98d76a2f92 | |||
| 7b50148c43 | |||
| aef6da8b7b | |||
| 0fb14afc08 | |||
| dad71b04dd | |||
| 80014b02b5 | |||
| 7c2a6700eb | |||
| 7e81013b15 | |||
| f0107129fb | |||
| 04cce64859 | |||
| 3b7637f3cf | |||
| 7333746948 | |||
| 0fa6049298 | |||
| 64be6ce957 | |||
| 0e075c03d8 | |||
| 5de195b56b | |||
| cd60f1b096 | |||
| 8058f9b022 | |||
| a484506029 | |||
| a69f99dc61 | |||
| c3583c98be | |||
| 813e574425 | |||
| ac431ca815 | |||
| 3158955d00 | |||
| dbc5950294 | |||
| 00a218fe87 | |||
| 4a92469465 | |||
| cd67ebd487 | |||
| 6853d0bb57 | |||
| 9afc19268a | |||
| f6faf10d43 | |||
| b061102c23 | |||
| e8b8cd9f04 | |||
| 9f4b5e02e8 | |||
| 1c84c1f843 | |||
| 23beb5cac7 | |||
| 2fb2f1fcc0 | |||
| 7c1529f890 | |||
| 8b54b48805 | |||
| 07601a7130 | |||
| 7fd1224502 | |||
| 1d56bd9f36 | |||
| a8783cc929 | |||
| 841ff06005 | |||
| 3a54167ec7 | |||
| bc18f9b198 | |||
| 6741f9849d | |||
| 14c0f7f486 | |||
| 095f3c0b31 | |||
| f2ad8286d7 | |||
| 18ad27d513 | |||
| 06807275b9 | |||
| 2ad39bfbd6 | |||
| 9f38947fe7 | |||
| 81c1e78bed | |||
| dd0817709b | |||
| 66a1156d5c | |||
| 1be2c7122e | |||
| e9218e4d21 | |||
| 812afc2dab | |||
| 4ec34550ed | |||
| ca6ab997de | |||
| 8b05909b74 | |||
| 1e6372cbb1 | |||
| d29c343911 | |||
| f3ef51bffb | 
| @ -4,8 +4,6 @@ namespace Crater; | ||||
| use Illuminate\Database\Eloquent\Model; | ||||
| use Crater\User; | ||||
| use Crater\Country; | ||||
| use Crater\State; | ||||
| use Crater\City; | ||||
|  | ||||
| class Address extends Model | ||||
| { | ||||
| @ -16,8 +14,8 @@ class Address extends Model | ||||
|         'name', | ||||
|         'address_street_1', | ||||
|         'address_street_2', | ||||
|         'city_id', | ||||
|         'state_id', | ||||
|         'city', | ||||
|         'state', | ||||
|         'country_id', | ||||
|         'zip', | ||||
|         'phone', | ||||
| @ -35,14 +33,4 @@ class Address extends Model | ||||
|     { | ||||
|         return $this->belongsTo(Country::class); | ||||
|     } | ||||
|  | ||||
|     public function state() | ||||
|     { | ||||
|         return $this->belongsTo(State::class); | ||||
|     } | ||||
|  | ||||
|     public function city() | ||||
|     { | ||||
|         return $this->belongsTo(City::class); | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										18
									
								
								app/City.php
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								app/City.php
									
									
									
									
									
								
							| @ -1,18 +0,0 @@ | ||||
| <?php | ||||
| namespace Crater; | ||||
|  | ||||
| use Illuminate\Database\Eloquent\Model; | ||||
| use Crater\State; | ||||
|  | ||||
| class City extends Model | ||||
| { | ||||
|     public function state() | ||||
|     { | ||||
|         return $this->belongsTo(State::class); | ||||
|     } | ||||
|  | ||||
|     public function address() | ||||
|     { | ||||
|         return $this->hasMany(Address::class); | ||||
|     } | ||||
| } | ||||
| @ -2,15 +2,9 @@ | ||||
| namespace Crater; | ||||
|  | ||||
| use Illuminate\Database\Eloquent\Model; | ||||
| use Crater\State; | ||||
|  | ||||
| class Country extends Model | ||||
| { | ||||
|     public function states() | ||||
|     { | ||||
|         return $this->hasMany(State::class); | ||||
|     } | ||||
|  | ||||
|     public function address() | ||||
|     { | ||||
|         return $this->hasMany(Address::class); | ||||
|  | ||||
| @ -24,6 +24,7 @@ class EstimateItem extends Model | ||||
|         'price' => 'integer', | ||||
|         'total' => 'integer', | ||||
|         'discount' => 'float', | ||||
|         'quantity' => 'float', | ||||
|         'discount_val' => 'integer', | ||||
|         'tax' => 'integer' | ||||
|     ]; | ||||
|  | ||||
| @ -56,7 +56,7 @@ class CompanyController extends Controller | ||||
|  | ||||
|     public function getAdminCompany() | ||||
|     { | ||||
|         $user = User::with(['addresses', 'addresses.country', 'addresses.state', 'addresses.city', 'company'])->find(1); | ||||
|         $user = User::with(['addresses', 'addresses.country', 'company'])->find(1); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'user' => $user | ||||
| @ -75,9 +75,9 @@ class CompanyController extends Controller | ||||
|             $company->addMediaFromRequest('logo')->toMediaCollection('logo'); | ||||
|         } | ||||
|  | ||||
|         $fields = $request->only(['address_street_1', 'address_street_2', 'city_id', 'state_id', 'country_id', 'zip', 'phone']); | ||||
|         $fields = $request->only(['address_street_1', 'address_street_2', 'city', 'state', 'country_id', 'zip', 'phone']); | ||||
|         $address = Address::updateOrCreate(['user_id' => 1], $fields); | ||||
|         $user = User::with(['addresses', 'addresses.country', 'addresses.state', 'addresses.city', 'company'])->find(1); | ||||
|         $user = User::with(['addresses', 'addresses.country', 'company'])->find(1); | ||||
|  | ||||
|         return response()->json([ | ||||
|             'user' => $user, | ||||
| @ -227,4 +227,32 @@ class CompanyController extends Controller | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Upload the Admin Avatar to public storage. | ||||
|      * | ||||
|      * @param  \Illuminate\Http\Request $request | ||||
|      * @return \Illuminate\Http\Response | ||||
|      */ | ||||
|     public function uploadAdminAvatar(Request $request) | ||||
|     { | ||||
|         $data = json_decode($request->admin_avatar); | ||||
|  | ||||
|         if($data) { | ||||
|             $user = auth()->user(); | ||||
|  | ||||
|             if($user) { | ||||
|                 $user->clearMediaCollection('admin_avatar'); | ||||
|  | ||||
|                 $user->addMediaFromBase64($data->data) | ||||
|                     ->usingFileName($data->name) | ||||
|                     ->toMediaCollection('admin_avatar'); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return response()->json([ | ||||
|             'user' => $user, | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -80,8 +80,8 @@ class CustomersController extends Controller | ||||
|                 $newAddress->name = $address["name"]; | ||||
|                 $newAddress->address_street_1 = $address["address_street_1"]; | ||||
|                 $newAddress->address_street_2 = $address["address_street_2"]; | ||||
|                 $newAddress->city_id = $address["city_id"]; | ||||
|                 $newAddress->state_id = $address["state_id"]; | ||||
|                 $newAddress->city = $address["city"]; | ||||
|                 $newAddress->state = $address["state"]; | ||||
|                 $newAddress->country_id = $address["country_id"]; | ||||
|                 $newAddress->zip = $address["zip"]; | ||||
|                 $newAddress->phone = $address["phone"]; | ||||
| @ -112,11 +112,7 @@ class CustomersController extends Controller | ||||
|             'billingAddress', | ||||
|             'shippingAddress', | ||||
|             'billingAddress.country', | ||||
|             'billingAddress.state', | ||||
|             'billingAddress.city', | ||||
|             'shippingAddress.country', | ||||
|             'shippingAddress.state', | ||||
|             'shippingAddress.city', | ||||
|         ])->find($id); | ||||
|  | ||||
|         return response()->json([ | ||||
| @ -160,6 +156,7 @@ class CustomersController extends Controller | ||||
|             if ($verifyEmail) { | ||||
|                 if ($verifyEmail->id !== $customer->id) { | ||||
|                     return response()->json([ | ||||
|                         'success' => false, | ||||
|                         'error' => 'Email already in use' | ||||
|                     ]); | ||||
|                 } | ||||
| @ -186,8 +183,8 @@ class CustomersController extends Controller | ||||
|                 $newAddress->name = $address["name"]; | ||||
|                 $newAddress->address_street_1 = $address["address_street_1"]; | ||||
|                 $newAddress->address_street_2 = $address["address_street_2"]; | ||||
|                 $newAddress->city_id = $address["city_id"]; | ||||
|                 $newAddress->state_id = $address["state_id"]; | ||||
|                 $newAddress->city = $address["city"]; | ||||
|                 $newAddress->state = $address["state"]; | ||||
|                 $newAddress->country_id = $address["country_id"]; | ||||
|                 $newAddress->zip = $address["zip"]; | ||||
|                 $newAddress->phone = $address["phone"]; | ||||
|  | ||||
| @ -33,10 +33,14 @@ class EnvironmentController extends Controller | ||||
|      */ | ||||
|     public function saveDatabaseEnvironment(DatabaseEnvironmentRequest $request) | ||||
|     { | ||||
|         Artisan::call('config:clear'); | ||||
|         Artisan::call('cache:clear'); | ||||
|  | ||||
|         $results = $this->EnvironmentManager->saveDatabaseVariables($request); | ||||
|  | ||||
|         if(array_key_exists("success", $results)) { | ||||
|             Artisan::call('config:clear'); | ||||
|             Artisan::call('cache:clear'); | ||||
|             Artisan::call('storage:link'); | ||||
|             Artisan::call('key:generate --force'); | ||||
|             Artisan::call('migrate --seed --force'); | ||||
|  | ||||
| @ -90,7 +90,7 @@ class FrontendController extends Controller | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $companyAddress = User::with(['addresses', 'addresses.country', 'addresses.state', 'addresses.city'])->find(1); | ||||
|         $companyAddress = User::with(['addresses', 'addresses.country'])->find(1); | ||||
|  | ||||
|         $colors = [ | ||||
|             'invoice_primary_color', | ||||
| @ -189,7 +189,7 @@ class FrontendController extends Controller | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $companyAddress = User::with(['addresses', 'addresses.country', 'addresses.state', 'addresses.city'])->find(1); | ||||
|         $companyAddress = User::with(['addresses', 'addresses.country'])->find(1); | ||||
|  | ||||
|         $colors = [ | ||||
|             'invoice_primary_color', | ||||
| @ -262,7 +262,7 @@ class FrontendController extends Controller | ||||
|         $estimateTemplate = EstimateTemplate::find($estimate->estimate_template_id); | ||||
|  | ||||
|         $company = Company::find($estimate->company_id); | ||||
|         $companyAddress = User::with(['addresses', 'addresses.country', 'addresses.state', 'addresses.city'])->find(1); | ||||
|         $companyAddress = User::with(['addresses', 'addresses.country'])->find(1); | ||||
|         $logo = $company->getMedia('logo')->first(); | ||||
|  | ||||
|         if($logo) { | ||||
| @ -338,7 +338,7 @@ class FrontendController extends Controller | ||||
|  | ||||
|         $invoiceTemplate = InvoiceTemplate::find($invoice->invoice_template_id); | ||||
|         $company = Company::find($invoice->company_id); | ||||
|         $companyAddress = User::with(['addresses', 'addresses.country', 'addresses.state', 'addresses.city'])->find(1); | ||||
|         $companyAddress = User::with(['addresses', 'addresses.country'])->find(1); | ||||
|  | ||||
|         $logo = $company->getMedia('logo')->first(); | ||||
|  | ||||
|  | ||||
| @ -3,8 +3,6 @@ namespace Crater\Http\Controllers; | ||||
|  | ||||
| use Illuminate\Http\Request; | ||||
| use Crater\Country; | ||||
| use Crater\State; | ||||
| use Crater\City; | ||||
|  | ||||
| class LocationController extends Controller | ||||
| { | ||||
| @ -14,18 +12,4 @@ class LocationController extends Controller | ||||
|             'countries' => Country::all() | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function getStates($id) | ||||
|     { | ||||
|         return response()->json([ | ||||
|             'states' => Country::find($id)->states | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function getCities($id) | ||||
|     { | ||||
|         return response()->json([ | ||||
|             'cities' => State::find($id)->cities | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -58,8 +58,6 @@ class OnboardingController extends Controller | ||||
|         $user = User::with([ | ||||
|             'addresses', | ||||
|             'addresses.country', | ||||
|             'addresses.state', | ||||
|             'addresses.city', | ||||
|             'company' | ||||
|         ])->find(1); | ||||
|  | ||||
| @ -99,6 +97,32 @@ class OnboardingController extends Controller | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function uploadAdminAvatar(Request $request) | ||||
|     { | ||||
|         $setting = Setting::getSetting('profile_complete'); | ||||
|  | ||||
|         if ($setting == '1' || $setting == 'COMPLETED') { | ||||
|             return response()->json(['error' => 'Profile already created.']); | ||||
|         } | ||||
|         $data = json_decode($request->admin_avatar); | ||||
|  | ||||
|         if($data) { | ||||
|             $user = User::find($data->id); | ||||
|             if($user) { | ||||
|                 $user->clearMediaCollection('admin_avatar'); | ||||
|  | ||||
|                 $user->addMediaFromBase64($data->data) | ||||
|                     ->usingFileName($data->name) | ||||
|                     ->toMediaCollection('admin_avatar'); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return response()->json([ | ||||
|             'user' => $user, | ||||
|             'success' => true | ||||
|         ]); | ||||
|     } | ||||
|  | ||||
|     public function adminCompany(CompanyRequest $request) | ||||
|     { | ||||
|         $setting = Setting::getSetting('profile_complete'); | ||||
| @ -130,8 +154,8 @@ class OnboardingController extends Controller | ||||
|         $fields = $request->only([ | ||||
|             'address_street_1', | ||||
|             'address_street_2', | ||||
|             'city_id', | ||||
|             'state_id', | ||||
|             'city', | ||||
|             'state', | ||||
|             'country_id', | ||||
|             'zip', | ||||
|             'phone' | ||||
|  | ||||
| @ -83,8 +83,7 @@ class ReportController extends Controller | ||||
|     { | ||||
|         $company = Company::where('unique_hash', $hash)->first(); | ||||
|  | ||||
|         $items = InvoiceItem::with('item') | ||||
|             ->whereCompany($company->id) | ||||
|         $items = InvoiceItem::whereCompany($company->id) | ||||
|             ->applyInvoiceFilters($request->only(['from_date', 'to_date'])) | ||||
|             ->itemAttributes() | ||||
|             ->get(); | ||||
|  | ||||
| @ -36,7 +36,6 @@ class CustomerRequest extends FormRequest | ||||
|                     'name' => 'required', | ||||
|                     'addresses.*.address_street_1' => 'max:255', | ||||
|                     'addresses.*.address_street_2' => 'max:255', | ||||
|                     'email' =>  'email|nullable|unique:users,email,'.$this->id | ||||
|                 ]; | ||||
|                 break; | ||||
|             default: | ||||
|  | ||||
| @ -25,11 +25,11 @@ class DatabaseEnvironmentRequest extends FormRequest | ||||
|     { | ||||
|         return [ | ||||
|             'app_url'               => 'required|url', | ||||
|             'database_connection'   => 'required|string|max:50', | ||||
|             'database_hostname'     => 'required|string|max:50', | ||||
|             'database_connection'   => 'required|string', | ||||
|             'database_hostname'     => 'required|string', | ||||
|             'database_port'         => 'required|numeric', | ||||
|             'database_name'         => 'required|string|max:50', | ||||
|             'database_username'     => 'required|string|max:50', | ||||
|             'database_name'         => 'required|string', | ||||
|             'database_username'     => 'required|string', | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -26,55 +26,55 @@ class MailEnvironmentRequest extends FormRequest | ||||
|         switch ($this->get('mail_driver')) { | ||||
|             case 'smtp': | ||||
|                 return [ | ||||
|                     'mail_driver'           => 'required|string|max:50', | ||||
|                     'mail_host'             => 'required|string|max:50', | ||||
|                     'mail_port'             => 'required|max:50', | ||||
|                     'mail_driver'           => 'required|string', | ||||
|                     'mail_host'             => 'required|string', | ||||
|                     'mail_port'             => 'required', | ||||
|                     'mail_username'         => 'required|string', | ||||
|                     'mail_password'         => 'required|string', | ||||
|                     'mail_encryption'       => 'required|string|max:50', | ||||
|                     'from_name'             => 'required|string|max:50', | ||||
|                     'from_mail'             => 'required|string|max:50', | ||||
|                     'mail_encryption'       => 'required|string', | ||||
|                     'from_name'             => 'required|string', | ||||
|                     'from_mail'             => 'required|string', | ||||
|                 ]; | ||||
|                 break; | ||||
|  | ||||
|             case 'mailgun': | ||||
|                 return [ | ||||
|                     'mail_driver'           => 'required|string|max:50', | ||||
|                     'mail_host'             => 'required|string|max:50', | ||||
|                     'mail_port'             => 'required|max:50', | ||||
|                     'mail_driver'           => 'required|string', | ||||
|                     'mail_host'             => 'required|string', | ||||
|                     'mail_port'             => 'required', | ||||
|                     'mail_mailgun_domain'   => 'required|string', | ||||
|                     'mail_mailgun_secret'   => 'required|string', | ||||
|                     'mail_mailgun_endpoint' => 'required|string', | ||||
|                     'mail_encryption'       => 'required|string|max:50', | ||||
|                     'from_name'             => 'required|string|max:50', | ||||
|                     'from_mail'             => 'required|string|max:50', | ||||
|                     'mail_encryption'       => 'required|string', | ||||
|                     'from_name'             => 'required|string', | ||||
|                     'from_mail'             => 'required|string', | ||||
|                 ]; | ||||
|                 break; | ||||
|  | ||||
|             case 'ses': | ||||
|                 return [ | ||||
|                     'mail_driver'           => 'required|string|max:50', | ||||
|                     'mail_host'             => 'required|string|max:50', | ||||
|                     'mail_port'             => 'required|max:50', | ||||
|                     'mail_driver'           => 'required|string', | ||||
|                     'mail_host'             => 'required|string', | ||||
|                     'mail_port'             => 'required', | ||||
|                     'mail_ses_key'          => 'required|string', | ||||
|                     'mail_ses_secret'       => 'required|string', | ||||
|                     'mail_encryption'       => 'required|string|max:50', | ||||
|                     'from_name'             => 'required|string|max:50', | ||||
|                     'from_mail'             => 'required|string|max:50', | ||||
|                     'mail_encryption'       => 'required|string', | ||||
|                     'from_name'             => 'required|string', | ||||
|                     'from_mail'             => 'required|string', | ||||
|                 ]; | ||||
|                 break; | ||||
|  | ||||
|             case 'mail': | ||||
|                 return [ | ||||
|                     'from_name'             => 'required|string|max:50', | ||||
|                     'from_mail'             => 'required|string|max:50', | ||||
|                     'from_name'             => 'required|string', | ||||
|                     'from_mail'             => 'required|string', | ||||
|                 ]; | ||||
|                 break; | ||||
|  | ||||
|             case 'sendmail': | ||||
|                 return [ | ||||
|                     'from_name'             => 'required|string|max:50', | ||||
|                     'from_mail'             => 'required|string|max:50', | ||||
|                     'from_name'             => 'required|string', | ||||
|                     'from_mail'             => 'required|string', | ||||
|                 ]; | ||||
|                 break; | ||||
|         } | ||||
|  | ||||
| @ -82,7 +82,7 @@ class Invoice extends Model | ||||
|         // So the substr returns this 000001 | ||||
|  | ||||
|         // Add the string in front and higher up the number. | ||||
|         // the %05d part makes sure that there are always 6 numbers in the string. | ||||
|         // the %06d part makes sure that there are always 6 numbers in the string. | ||||
|         // so it adds the missing zero's when needed. | ||||
|  | ||||
|         return sprintf('%06d', intval($number) + 1); | ||||
|  | ||||
| @ -30,6 +30,7 @@ class InvoiceItem extends Model | ||||
|         'price' => 'integer', | ||||
|         'total' => 'integer', | ||||
|         'discount' => 'float', | ||||
|         'quantity' => 'float', | ||||
|         'discount_val' => 'integer', | ||||
|         'tax' => 'integer' | ||||
|     ]; | ||||
| @ -78,7 +79,8 @@ class InvoiceItem extends Model | ||||
|     public function scopeItemAttributes($query) | ||||
|     { | ||||
|         $query->select( | ||||
|             DB::raw('sum(quantity) as total_quantity, sum(total) as total_amount, item_id') | ||||
|         )->groupBy('item_id'); | ||||
|             DB::raw('sum(quantity) as total_quantity, sum(total) as total_amount, invoice_items.name') | ||||
|         )->groupBy('invoice_items.name'); | ||||
|  | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -12,10 +12,10 @@ class Listener | ||||
|      * @param  $event | ||||
|      * @return boolean | ||||
|      */ | ||||
|     protected function check($event) | ||||
|     protected function isListenerFired($event) | ||||
|     { | ||||
|         // Do not apply to the same or newer versions | ||||
|         if (version_compare(static::VERSION, $event->old, '>')) { | ||||
|         if (version_compare(static::VERSION, $event->old, '<=')) { | ||||
|             return true; | ||||
|         } | ||||
|  | ||||
|  | ||||
							
								
								
									
										115
									
								
								app/Listeners/Updates/v1/Version110.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								app/Listeners/Updates/v1/Version110.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,115 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Listeners\Updates\v1; | ||||
|  | ||||
| use Illuminate\Contracts\Queue\ShouldQueue; | ||||
| use Illuminate\Queue\InteractsWithQueue; | ||||
| use Crater\Events\UpdateFinished; | ||||
| use Crater\Listeners\Updates\Listener; | ||||
| use Crater\Setting; | ||||
| use Crater\Currency; | ||||
|  | ||||
| class Version110 extends Listener | ||||
| { | ||||
|     const VERSION = '1.1.0'; | ||||
|  | ||||
|     /** | ||||
|      * Create the event listener. | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         // | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Handle the event. | ||||
|      * | ||||
|      * @param  object  $event | ||||
|      * @return void | ||||
|      */ | ||||
|     public function handle(UpdateFinished $event) | ||||
|     { | ||||
|         if ($this->isListenerFired($event)) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Add currencies | ||||
|         $this->addCurrencies(); | ||||
|  | ||||
|         // Update Crater app version | ||||
|         Setting::setSetting('version', static::VERSION); | ||||
|     } | ||||
|  | ||||
|     private function addCurrencies() { | ||||
|  | ||||
|         $currencies = [ | ||||
|             '13' => [ | ||||
|                 'symbol' => 'S$' | ||||
|             ], | ||||
|             '16' => [ | ||||
|                 'symbol' => '₫' | ||||
|             ], | ||||
|             '17' => [ | ||||
|                 'symbol' => 'Fr.' | ||||
|             ], | ||||
|             '21' => [ | ||||
|                 'symbol' => '฿' | ||||
|             ], | ||||
|             '22' => [ | ||||
|                 'symbol' => '₦' | ||||
|             ], | ||||
|             '26' => [ | ||||
|                 'symbol' => 'HK$' | ||||
|             ], | ||||
|             '35' => [ | ||||
|                 'symbol' => 'NAƒ' | ||||
|             ], | ||||
|             '38' => [ | ||||
|                 'symbol' => 'GH₵' | ||||
|             ], | ||||
|             '39' => [ | ||||
|                 'symbol' => 'Лв.' | ||||
|             ], | ||||
|             '42' => [ | ||||
|                 'symbol' => 'RON' | ||||
|             ], | ||||
|             '44' => [ | ||||
|                 'symbol' => 'SِAR' | ||||
|             ], | ||||
|             '46' => [ | ||||
|                 'symbol' => 'Rf' | ||||
|             ], | ||||
|             '47' => [ | ||||
|                 'symbol' => '₡' | ||||
|             ], | ||||
|             '54' => [ | ||||
|                 'symbol' => 'د.ت' | ||||
|             ], | ||||
|             '55' => [ | ||||
|                 'symbol' => '₽' | ||||
|             ], | ||||
|             '57' => [ | ||||
|                 'symbol' => 'ر.ع.' | ||||
|             ], | ||||
|             '58' => [ | ||||
|                 'symbol' => '₴' | ||||
|             ], | ||||
|  | ||||
|         ]; | ||||
|  | ||||
|         foreach ($currencies as $key => $currency) { | ||||
|             Currency::updateOrCreate(['id' => $key], $currency); | ||||
|         } | ||||
|  | ||||
|         Currency::create([ | ||||
|             'name' => 'Kuwaiti Dinar', | ||||
|             'code' => 'KWD', | ||||
|             'symbol' => 'KWD ', | ||||
|             'precision' => '3', | ||||
|             'thousand_separator' => ',', | ||||
|             'decimal_separator' => '.' | ||||
|         ]); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										110
									
								
								app/Listeners/Updates/v2/Version200.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								app/Listeners/Updates/v2/Version200.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,110 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Listeners\Updates\v2; | ||||
|  | ||||
| use Illuminate\Contracts\Queue\ShouldQueue; | ||||
| use Illuminate\Queue\InteractsWithQueue; | ||||
| use Illuminate\Database\Schema\Blueprint; | ||||
| use Crater\Listeners\Updates\Listener; | ||||
| use Crater\Listeners\Updates\v2\Version200; | ||||
| use Crater\Events\UpdateFinished; | ||||
| use Crater\Setting; | ||||
| use Crater\Address; | ||||
|  | ||||
| class Version200 extends Listener | ||||
| { | ||||
|     const VERSION = '2.0.0'; | ||||
|  | ||||
|     /** | ||||
|      * Create the event listener. | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         // | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Handle the event. | ||||
|      * | ||||
|      * @param  object  $event | ||||
|      * @return void | ||||
|      */ | ||||
|     public function handle(UpdateFinished $event) | ||||
|     { | ||||
|         if ($this->isListenerFired($event)) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Replace state and city id to name | ||||
|         $this->replaceStateAndCityName(); | ||||
|  | ||||
|         // Drop states and cities foreign key | ||||
|         $this->dropForeignKey(); | ||||
|  | ||||
|         // Remove states and cities tables | ||||
|         $this->dropSchemas(); | ||||
|  | ||||
|         // Delete state & city models, migrations & seeders | ||||
|         $this->deleteFiles(); | ||||
|  | ||||
|         // Update Crater app version | ||||
|         $this->updateVersion(); | ||||
|     } | ||||
|  | ||||
|     private function replaceStateAndCityName() { | ||||
|         \Schema::table('addresses', function (Blueprint $table) { | ||||
|             $table->string('state')->nullable(); | ||||
|             $table->string('city')->nullable(); | ||||
|         }); | ||||
|  | ||||
|         $addresses = \Crater\Address::all(); | ||||
|         foreach ($addresses as $add) { | ||||
|             $city = \Crater\City::find($add->city_id); | ||||
|             if($city) { | ||||
|                 $add->city = $city->name; | ||||
|             } | ||||
|  | ||||
|             $state = \Crater\State::find($add->state_id); | ||||
|             if($state) { | ||||
|                 $add->state = $state->name; | ||||
|             } | ||||
|  | ||||
|             $add->save(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private function dropForeignKey() { | ||||
|         \Schema::table('addresses', function (Blueprint $table) { | ||||
|             $table->dropForeign('addresses_state_id_foreign'); | ||||
|             $table->dropForeign('addresses_city_id_foreign'); | ||||
|             $table->dropColumn('state_id'); | ||||
|             $table->dropColumn('city_id'); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     private function dropSchemas() { | ||||
|         \Schema::disableForeignKeyConstraints(); | ||||
|  | ||||
|         \Schema::dropIfExists('states'); | ||||
|         \Schema::dropIfExists('cities'); | ||||
|  | ||||
|         \Schema::enableForeignKeyConstraints(); | ||||
|     } | ||||
|  | ||||
|     private function deleteFiles() { | ||||
|         \File::delete( | ||||
|             database_path('migrations/2017_05_06_172817_create_cities_table.php'), | ||||
|             database_path('migrations/2017_05_06_173711_create_states_table.php'), | ||||
|             database_path('seeds/StatesTableSeeder.php'), | ||||
|             database_path('seeds/CitiesTableSeeder.php'), | ||||
|             app_path('City.php'), | ||||
|             app_path('State.php') | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     private function updateVersion() { | ||||
|         Setting::setSetting('version', static::VERSION); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										87
									
								
								app/Listeners/Updates/v2/Version201.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								app/Listeners/Updates/v2/Version201.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,87 @@ | ||||
| <?php | ||||
|  | ||||
| namespace Crater\Listeners\Updates\v2; | ||||
|  | ||||
| use Illuminate\Contracts\Queue\ShouldQueue; | ||||
| use Illuminate\Queue\InteractsWithQueue; | ||||
| use Illuminate\Database\Schema\Blueprint; | ||||
| use Crater\Events\UpdateFinished; | ||||
| use Crater\Listeners\Updates\Listener; | ||||
| use Crater\Setting; | ||||
|  | ||||
| class Version201 extends Listener | ||||
| { | ||||
|     const VERSION = '2.0.1'; | ||||
|  | ||||
|     /** | ||||
|      * Create the event listener. | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         // | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Handle the event. | ||||
|      * | ||||
|      * @param  object  $event | ||||
|      * @return void | ||||
|      */ | ||||
|     public function handle(UpdateFinished $event) | ||||
|     { | ||||
|         if ($this->isListenerFired($event)) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Remove the language files | ||||
|         $this->removeLanguageFiles(); | ||||
|  | ||||
|         // Change estimate & invoice migrations | ||||
|         $this->changeMigrations(); | ||||
|  | ||||
|         // Update Crater app version | ||||
|         Setting::setSetting('version', static::VERSION); | ||||
|     } | ||||
|  | ||||
|     private function removeLanguageFiles() { | ||||
|         $en = resource_path('assets/js/plugins/en.js'); | ||||
|         $es = resource_path('assets/js/plugins/es.js'); | ||||
|         $fr = resource_path('assets/js/plugins/fr.js'); | ||||
|  | ||||
|         if(file_exists($en)) { | ||||
|             unlink($en); | ||||
|         } | ||||
|  | ||||
|         if(file_exists($es)) { | ||||
|             unlink($es); | ||||
|         } | ||||
|  | ||||
|         if(file_exists($fr)) { | ||||
|             unlink($fr); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private function changeMigrations() | ||||
|     { | ||||
|         \Schema::table('invoices', function (Blueprint $table) { | ||||
|             $table->decimal('discount', 15, 2)->nullable()->change(); | ||||
|         }); | ||||
|  | ||||
|         \Schema::table('estimates', function (Blueprint $table) { | ||||
|             $table->decimal('discount', 15, 2)->nullable()->change(); | ||||
|         }); | ||||
|  | ||||
|         \Schema::table('invoice_items', function (Blueprint $table) { | ||||
|             $table->decimal('quantity', 15, 2)->change(); | ||||
|             $table->decimal('discount', 15, 2)->nullable()->change(); | ||||
|         }); | ||||
|  | ||||
|         \Schema::table('estimate_items', function (Blueprint $table) { | ||||
|             $table->decimal('quantity', 15, 2)->change(); | ||||
|             $table->decimal('discount', 15, 2)->nullable()->change(); | ||||
|             $table->unsignedBigInteger('discount_val')->nullable()->change(); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| @ -5,6 +5,9 @@ use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvi | ||||
| use Illuminate\Auth\Events\Registered; | ||||
| use Illuminate\Auth\Listeners\SendEmailVerificationNotification; | ||||
| use Crater\Events\UpdateFinished; | ||||
| use Crater\Listeners\Updates\v1\Version110; | ||||
| use Crater\Listeners\Updates\v2\Version200; | ||||
| use Crater\Listeners\Updates\v2\Version201; | ||||
|  | ||||
| class EventServiceProvider extends ServiceProvider | ||||
| { | ||||
| @ -15,6 +18,9 @@ class EventServiceProvider extends ServiceProvider | ||||
|      */ | ||||
|     protected $listen = [ | ||||
|         UpdateFinished::class=> [ | ||||
|             Version110::class, | ||||
|             Version200::class, | ||||
|             Version201::class, | ||||
|         ], | ||||
|         Registered::class => [ | ||||
|             SendEmailVerificationNotification::class, | ||||
|  | ||||
| @ -48,17 +48,21 @@ class EnvironmentManager | ||||
|             'DB_USERNAME='.$request->database_username."\n". | ||||
|             'DB_PASSWORD='.$request->database_password."\n\n"; | ||||
|  | ||||
|         if (! $this->checkDatabaseConnection($request)) { | ||||
|         try { | ||||
|  | ||||
|             return [ | ||||
|                 'error' => 'connection_failed' | ||||
|             ]; | ||||
|         } else { | ||||
|             if(count(DB::connection()->select('SHOW TABLES'))) { | ||||
|             $this->checkDatabaseConnection($request); | ||||
|  | ||||
|             if(\Schema::hasTable('users') ) { | ||||
|                 return [ | ||||
|                     'error' => 'database_should_be_empty' | ||||
|                 ]; | ||||
|             } | ||||
|  | ||||
|         } catch (Exception $e) { | ||||
|  | ||||
|             return [ | ||||
|                 'error' => $e->getMessage() | ||||
|             ]; | ||||
|         } | ||||
|  | ||||
|         try { | ||||
| @ -118,8 +122,6 @@ class EnvironmentManager | ||||
|                 ); | ||||
|             } | ||||
|  | ||||
|  | ||||
|  | ||||
|         } catch (Exception $e) { | ||||
|             return [ | ||||
|                 'error' => 'mail_variables_save_error' | ||||
| @ -316,12 +318,6 @@ class EnvironmentManager | ||||
|             ], | ||||
|         ]); | ||||
|  | ||||
|         try { | ||||
|             DB::connection()->getPdo(); | ||||
|  | ||||
|             return true; | ||||
|         } catch (Exception $e) { | ||||
|             return false; | ||||
|         } | ||||
|         return DB::connection()->getPdo(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,25 +0,0 @@ | ||||
| <?php | ||||
| namespace Crater; | ||||
|  | ||||
| use Illuminate\Database\Eloquent\Model; | ||||
| use Crater\City; | ||||
| use Crater\Country; | ||||
| use Crater\Address; | ||||
|  | ||||
| class State extends Model | ||||
| { | ||||
|     public function cities() | ||||
|     { | ||||
|         return $this->hasMany(City::class); | ||||
|     } | ||||
|  | ||||
|     public function country() | ||||
|     { | ||||
|         return $this->belongsTo(Country::class); | ||||
|     } | ||||
|  | ||||
|     public function address() | ||||
|     { | ||||
|         return $this->hasMany(Address::class); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										12
									
								
								app/User.php
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								app/User.php
									
									
									
									
									
								
							| @ -51,7 +51,8 @@ class User extends Authenticatable implements HasMedia | ||||
|     ]; | ||||
|  | ||||
|     protected $appends = [ | ||||
|         'formattedCreatedAt' | ||||
|         'formattedCreatedAt', | ||||
|         'avatar' | ||||
|     ]; | ||||
|  | ||||
|     /** | ||||
| @ -244,4 +245,13 @@ class User extends Authenticatable implements HasMedia | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public function getAvatarAttribute() | ||||
|     { | ||||
|         $avatar = $this->getMedia('admin_avatar')->first(); | ||||
|         if ($avatar) { | ||||
|             return  asset($avatar->getUrl()); | ||||
|         } | ||||
|         return ; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -10,6 +10,7 @@ | ||||
|     "require": { | ||||
|         "php": "^7.2", | ||||
|         "barryvdh/laravel-dompdf": "^0.8.1", | ||||
|         "doctrine/dbal": "^2.10", | ||||
|         "fideloper/proxy": "^4.0", | ||||
|         "guzzlehttp/guzzle": "^6.3", | ||||
|         "intervention/image": "^2.3", | ||||
|  | ||||
							
								
								
									
										484
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										484
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							| @ -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": "2a5e8d91a2be3144e2812dd708dc14b7", | ||||
|     "content-hash": "e7cf4f0a8e1e7d60cc72b34ed4c730ce", | ||||
|     "packages": [ | ||||
|         { | ||||
|             "name": "barryvdh/laravel-dompdf", | ||||
| @ -158,6 +158,247 @@ | ||||
|             "description": "implementation of xdg base directory specification for php", | ||||
|             "time": "2014-10-24T07:27:01+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "doctrine/cache", | ||||
|             "version": "v1.8.1", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/doctrine/cache.git", | ||||
|                 "reference": "d4374ae95b36062d02ef310100ed33d78738d76c" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/doctrine/cache/zipball/d4374ae95b36062d02ef310100ed33d78738d76c", | ||||
|                 "reference": "d4374ae95b36062d02ef310100ed33d78738d76c", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": "~7.1" | ||||
|             }, | ||||
|             "conflict": { | ||||
|                 "doctrine/common": ">2.2,<2.4" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "alcaeus/mongo-php-adapter": "^1.1", | ||||
|                 "doctrine/coding-standard": "^4.0", | ||||
|                 "mongodb/mongodb": "^1.1", | ||||
|                 "phpunit/phpunit": "^7.0", | ||||
|                 "predis/predis": "~1.0" | ||||
|             }, | ||||
|             "suggest": { | ||||
|                 "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "1.8.x-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "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": "Caching library offering an object-oriented API for many cache backends", | ||||
|             "homepage": "https://www.doctrine-project.org", | ||||
|             "keywords": [ | ||||
|                 "cache", | ||||
|                 "caching" | ||||
|             ], | ||||
|             "time": "2019-10-28T09:31:32+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "doctrine/dbal", | ||||
|             "version": "v2.10.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/doctrine/dbal.git", | ||||
|                 "reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/doctrine/dbal/zipball/0c9a646775ef549eb0a213a4f9bd4381d9b4d934", | ||||
|                 "reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "doctrine/cache": "^1.0", | ||||
|                 "doctrine/event-manager": "^1.0", | ||||
|                 "ext-pdo": "*", | ||||
|                 "php": "^7.2" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "doctrine/coding-standard": "^6.0", | ||||
|                 "jetbrains/phpstorm-stubs": "^2019.1", | ||||
|                 "phpstan/phpstan": "^0.11.3", | ||||
|                 "phpunit/phpunit": "^8.4.1", | ||||
|                 "symfony/console": "^2.0.5|^3.0|^4.0|^5.0" | ||||
|             }, | ||||
|             "suggest": { | ||||
|                 "symfony/console": "For helpful console commands such as SQL execution and import of files." | ||||
|             }, | ||||
|             "bin": [ | ||||
|                 "bin/doctrine-dbal" | ||||
|             ], | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "2.10.x-dev", | ||||
|                     "dev-develop": "3.0.x-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" | ||||
|                 } | ||||
|             }, | ||||
|             "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", | ||||
|                 "sqlanywhere", | ||||
|                 "sqlite", | ||||
|                 "sqlserver", | ||||
|                 "sqlsrv" | ||||
|             ], | ||||
|             "time": "2019-11-03T16:50:43+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "doctrine/event-manager", | ||||
|             "version": "v1.0.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/doctrine/event-manager.git", | ||||
|                 "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3", | ||||
|                 "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": "^7.1" | ||||
|             }, | ||||
|             "conflict": { | ||||
|                 "doctrine/common": "<2.9@dev" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "doctrine/coding-standard": "^4.0", | ||||
|                 "phpunit/phpunit": "^7.0" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "1.0.x-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "Doctrine\\Common\\": "lib/Doctrine/Common" | ||||
|                 } | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "MIT" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Roman Borschel", | ||||
|                     "email": "roman@code-factory.org" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Benjamin Eberlei", | ||||
|                     "email": "kontakt@beberlei.de" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Guilherme Blanco", | ||||
|                     "email": "guilhermeblanco@gmail.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Jonathan Wage", | ||||
|                     "email": "jonwage@gmail.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Johannes Schmitt", | ||||
|                     "email": "schmittjoh@gmail.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Marco Pivetta", | ||||
|                     "email": "ocramius@gmail.com" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "Doctrine Event Manager component", | ||||
|             "homepage": "https://www.doctrine-project.org/projects/event-manager.html", | ||||
|             "keywords": [ | ||||
|                 "event", | ||||
|                 "eventdispatcher", | ||||
|                 "eventmanager" | ||||
|             ], | ||||
|             "time": "2018-06-11T11:59:03+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "doctrine/inflector", | ||||
|             "version": "v1.3.0", | ||||
| @ -5307,247 +5548,6 @@ | ||||
|             ], | ||||
|             "time": "2019-05-27T17:52:04+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "doctrine/cache", | ||||
|             "version": "v1.8.1", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/doctrine/cache.git", | ||||
|                 "reference": "d4374ae95b36062d02ef310100ed33d78738d76c" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/doctrine/cache/zipball/d4374ae95b36062d02ef310100ed33d78738d76c", | ||||
|                 "reference": "d4374ae95b36062d02ef310100ed33d78738d76c", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": "~7.1" | ||||
|             }, | ||||
|             "conflict": { | ||||
|                 "doctrine/common": ">2.2,<2.4" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "alcaeus/mongo-php-adapter": "^1.1", | ||||
|                 "doctrine/coding-standard": "^4.0", | ||||
|                 "mongodb/mongodb": "^1.1", | ||||
|                 "phpunit/phpunit": "^7.0", | ||||
|                 "predis/predis": "~1.0" | ||||
|             }, | ||||
|             "suggest": { | ||||
|                 "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "1.8.x-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "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": "Caching library offering an object-oriented API for many cache backends", | ||||
|             "homepage": "https://www.doctrine-project.org", | ||||
|             "keywords": [ | ||||
|                 "cache", | ||||
|                 "caching" | ||||
|             ], | ||||
|             "time": "2019-10-28T09:31:32+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "doctrine/dbal", | ||||
|             "version": "v2.10.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/doctrine/dbal.git", | ||||
|                 "reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/doctrine/dbal/zipball/0c9a646775ef549eb0a213a4f9bd4381d9b4d934", | ||||
|                 "reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "doctrine/cache": "^1.0", | ||||
|                 "doctrine/event-manager": "^1.0", | ||||
|                 "ext-pdo": "*", | ||||
|                 "php": "^7.2" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "doctrine/coding-standard": "^6.0", | ||||
|                 "jetbrains/phpstorm-stubs": "^2019.1", | ||||
|                 "phpstan/phpstan": "^0.11.3", | ||||
|                 "phpunit/phpunit": "^8.4.1", | ||||
|                 "symfony/console": "^2.0.5|^3.0|^4.0|^5.0" | ||||
|             }, | ||||
|             "suggest": { | ||||
|                 "symfony/console": "For helpful console commands such as SQL execution and import of files." | ||||
|             }, | ||||
|             "bin": [ | ||||
|                 "bin/doctrine-dbal" | ||||
|             ], | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "2.10.x-dev", | ||||
|                     "dev-develop": "3.0.x-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" | ||||
|                 } | ||||
|             }, | ||||
|             "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", | ||||
|                 "sqlanywhere", | ||||
|                 "sqlite", | ||||
|                 "sqlserver", | ||||
|                 "sqlsrv" | ||||
|             ], | ||||
|             "time": "2019-11-03T16:50:43+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "doctrine/event-manager", | ||||
|             "version": "v1.0.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/doctrine/event-manager.git", | ||||
|                 "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/doctrine/event-manager/zipball/a520bc093a0170feeb6b14e9d83f3a14452e64b3", | ||||
|                 "reference": "a520bc093a0170feeb6b14e9d83f3a14452e64b3", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": "^7.1" | ||||
|             }, | ||||
|             "conflict": { | ||||
|                 "doctrine/common": "<2.9@dev" | ||||
|             }, | ||||
|             "require-dev": { | ||||
|                 "doctrine/coding-standard": "^4.0", | ||||
|                 "phpunit/phpunit": "^7.0" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "1.0.x-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
|                 "psr-4": { | ||||
|                     "Doctrine\\Common\\": "lib/Doctrine/Common" | ||||
|                 } | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "MIT" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Roman Borschel", | ||||
|                     "email": "roman@code-factory.org" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Benjamin Eberlei", | ||||
|                     "email": "kontakt@beberlei.de" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Guilherme Blanco", | ||||
|                     "email": "guilhermeblanco@gmail.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Jonathan Wage", | ||||
|                     "email": "jonwage@gmail.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Johannes Schmitt", | ||||
|                     "email": "schmittjoh@gmail.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Marco Pivetta", | ||||
|                     "email": "ocramius@gmail.com" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "Doctrine Event Manager component", | ||||
|             "homepage": "https://www.doctrine-project.org/projects/event-manager.html", | ||||
|             "keywords": [ | ||||
|                 "event", | ||||
|                 "eventdispatcher", | ||||
|                 "eventmanager" | ||||
|             ], | ||||
|             "time": "2018-06-11T11:59:03+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "doctrine/instantiator", | ||||
|             "version": "1.2.0", | ||||
|  | ||||
| @ -4,11 +4,11 @@ return [ | ||||
|  | ||||
|     /* | ||||
|     |-------------------------------------------------------------------------- | ||||
|     | Crater Requirements | ||||
|     | Crater Configuration | ||||
|     |-------------------------------------------------------------------------- | ||||
|     | | ||||
|     */ | ||||
|  | ||||
|     'version' => '1.0.0', | ||||
|     'version' => '2.0.1', | ||||
|  | ||||
| ]; | ||||
|  | ||||
| @ -51,7 +51,7 @@ return [ | ||||
|             'collation' => 'utf8_unicode_ci', | ||||
|             'prefix' => '', | ||||
|             'prefix_indexes' => true, | ||||
|             'strict' => true, | ||||
|             'strict' => false, | ||||
|             'engine' => null, | ||||
|         ], | ||||
|  | ||||
|  | ||||
| @ -10,9 +10,9 @@ $factory->define(Address::class, function (Faker $faker) { | ||||
|         'name' => $faker->name, | ||||
|         'address_street_1' => $faker->streetAddress, | ||||
|         'address_street_2' => $faker->streetAddress, | ||||
|         'city_id' => 5909, | ||||
|         'state_id' => 42, | ||||
|         'country_id' => 1, | ||||
|         'city' => $faker->city, | ||||
|         'state' => $faker->state, | ||||
|         'country_id' => 231, | ||||
|         'zip' => $faker->postcode, | ||||
|         'phone' => $faker->phoneNumber, | ||||
|         'fax' => $faker->phoneNumber, | ||||
|  | ||||
| @ -25,7 +25,7 @@ class CreateInvoicesTable extends Migration | ||||
|             $table->string('discount_per_item'); | ||||
|             $table->text('notes')->nullable(); | ||||
|             $table->string('discount_type')->nullable(); | ||||
|             $table->unsignedBigInteger('discount')->nullable(); | ||||
|             $table->decimal('discount', 15, 2)->nullable(); | ||||
|             $table->unsignedBigInteger('discount_val')->nullable(); | ||||
|             $table->unsignedBigInteger('sub_total'); | ||||
|             $table->unsignedBigInteger('total'); | ||||
|  | ||||
| @ -18,10 +18,10 @@ class CreateInvoiceItemsTable extends Migration | ||||
|             $table->string('name'); | ||||
|             $table->string('description')->nullable(); | ||||
|             $table->string('discount_type'); | ||||
|             $table->unsignedBigInteger('quantity'); | ||||
|             $table->unsignedBigInteger('price'); | ||||
|             $table->decimal('quantity', 15, 2); | ||||
|             $table->decimal('discount', 15, 2)->nullable(); | ||||
|             $table->unsignedBigInteger('discount_val'); | ||||
|             $table->unsignedBigInteger('discount'); | ||||
|             $table->unsignedBigInteger('tax'); | ||||
|             $table->unsignedBigInteger('total'); | ||||
|             $table->integer('invoice_id')->unsigned(); | ||||
|  | ||||
| @ -23,8 +23,8 @@ class CreateEstimatesTable extends Migration | ||||
|             $table->string('tax_per_item'); | ||||
|             $table->string('discount_per_item'); | ||||
|             $table->string('notes')->nullable(); | ||||
|             $table->decimal('discount', 15, 2)->nullable(); | ||||
|             $table->string('discount_type')->nullable(); | ||||
|             $table->unsignedBigInteger('discount')->nullable(); | ||||
|             $table->unsignedBigInteger('discount_val')->nullable(); | ||||
|             $table->unsignedBigInteger('sub_total'); | ||||
|             $table->unsignedBigInteger('total'); | ||||
|  | ||||
| @ -1,33 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| use Illuminate\Support\Facades\Schema; | ||||
| use Illuminate\Database\Schema\Blueprint; | ||||
| use Illuminate\Database\Migrations\Migration; | ||||
|  | ||||
| class CreateCitiesTable extends Migration | ||||
| { | ||||
|     /** | ||||
|      * Run the migrations. | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function up() | ||||
|     { | ||||
|        Schema::create('cities', function (Blueprint $table) { | ||||
|         $table->engine = 'InnoDB'; | ||||
|         $table->increments('id')->index(); | ||||
|         $table->string('name'); | ||||
|         $table->integer('state_id');             | ||||
|     }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Reverse the migrations. | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function down() | ||||
|     { | ||||
|         Schema::dropIfExists('cities'); | ||||
|     } | ||||
| } | ||||
| @ -1,32 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| use Illuminate\Support\Facades\Schema; | ||||
| use Illuminate\Database\Schema\Blueprint; | ||||
| use Illuminate\Database\Migrations\Migration; | ||||
|  | ||||
| class CreateStatesTable extends Migration | ||||
| { | ||||
|     /** | ||||
|      * Run the migrations. | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function up() | ||||
|     { | ||||
|         Schema::create('states', function (Blueprint $table) { | ||||
|             $table->increments('id')->index(); | ||||
|             $table->string('name'); | ||||
|             $table->integer('country_id');             | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Reverse the migrations. | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function down() | ||||
|     { | ||||
|         Schema::dropIfExists('states'); | ||||
|     } | ||||
| } | ||||
| @ -18,9 +18,9 @@ class CreateEstimateItemsTable extends Migration | ||||
|             $table->string('name'); | ||||
|             $table->string('description')->nullable(); | ||||
|             $table->string('discount_type'); | ||||
|             $table->unsignedBigInteger('quantity'); | ||||
|             $table->unsignedBigInteger('discount'); | ||||
|             $table->unsignedBigInteger('discount_val'); | ||||
|             $table->decimal('quantity', 15, 2); | ||||
|             $table->decimal('discount', 15, 2)->nullable(); | ||||
|             $table->unsignedBigInteger('discount_val')->nullable(); | ||||
|             $table->unsignedBigInteger('price'); | ||||
|             $table->unsignedBigInteger('tax'); | ||||
|             $table->unsignedBigInteger('total'); | ||||
|  | ||||
| @ -18,10 +18,8 @@ class CreateAddressesTable extends Migration | ||||
|             $table->string('name')->nullable(); | ||||
|             $table->string('address_street_1')->nullable(); | ||||
|             $table->string('address_street_2')->nullable(); | ||||
|             $table->integer('city_id')->unsigned()->nullable(); | ||||
|             $table->foreign('city_id')->references('id')->on('cities'); | ||||
|             $table->integer('state_id')->unsigned()->nullable(); | ||||
|             $table->foreign('state_id')->references('id')->on('states'); | ||||
|             $table->string('city')->nullable(); | ||||
|             $table->string('state')->nullable(); | ||||
|             $table->integer('country_id')->unsigned()->nullable(); | ||||
|             $table->foreign('country_id')->references('id')->on('countries'); | ||||
|             $table->string('zip')->nullable(); | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -122,7 +122,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Singapore Dollar', | ||||
|                 'code' => 'SGD', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'S$', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -147,7 +147,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Vietnamese Dong', | ||||
|                 'code' => 'VND', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => '₫', | ||||
|                 'precision' => '0', | ||||
|                 'thousand_separator' => '.', | ||||
|                 'decimal_separator' => ',' | ||||
| @ -155,7 +155,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Swiss Franc', | ||||
|                 'code' => 'CHF', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'Fr.', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => '\'', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -187,7 +187,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Thai Baht', | ||||
|                 'code' => 'THB', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => '฿', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -195,7 +195,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Nigerian Naira', | ||||
|                 'code' => 'NGN', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => '₦', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -227,7 +227,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Hong Kong Dollar', | ||||
|                 'code' => 'HKD', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'HK$', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -299,7 +299,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Netherlands Antillean Guilder', | ||||
|                 'code' => 'ANG', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'NAƒ', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => '.', | ||||
|                 'decimal_separator' => ',' | ||||
| @ -323,7 +323,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Ghanaian Cedi', | ||||
|                 'code' => 'GHS', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'GH₵', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -331,7 +331,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Bulgarian Lev', | ||||
|                 'code' => 'BGN', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'Лв.', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ' ', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -355,7 +355,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Romanian New Leu', | ||||
|                 'code' => 'RON', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'RON', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -371,7 +371,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Saudi Riyal', | ||||
|                 'code' => 'SAR', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'SِAR', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -387,7 +387,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Maldivian Rufiyaa', | ||||
|                 'code' => 'MVR', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'Rf', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -395,7 +395,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Costa Rican Colón', | ||||
|                 'code' => 'CRC', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => '₡', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -454,7 +454,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Tunisian Dinar', | ||||
|                 'code' => 'TND', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'د.ت', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -462,7 +462,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Russian Ruble', | ||||
|                 'code' => 'RUB', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => '₽', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -479,7 +479,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Omani Rial', | ||||
|                 'code' => 'OMR', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => 'ر.ع.', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
| @ -487,7 +487,7 @@ class CurrenciesTableSeeder extends Seeder | ||||
|             [ | ||||
|                 'name' => 'Ukrainian Hryvnia', | ||||
|                 'code' => 'UAH', | ||||
|                 'symbol' => '', | ||||
|                 'symbol' => '₴', | ||||
|                 'precision' => '2', | ||||
|                 'thousand_separator' => ',', | ||||
|                 'decimal_separator' => '.' | ||||
|  | ||||
| @ -14,8 +14,6 @@ class DatabaseSeeder extends Seeder | ||||
|         $this->call(CurrenciesTableSeeder::class); | ||||
|         $this->call(RoleSeeder::class); | ||||
|         $this->call(CountriesTableSeeder::class); | ||||
|         $this->call(StatesTableSeeder::class); | ||||
|         $this->call(CitiesTableSeeder::class); | ||||
|         $this->call(EstimateTemplateSeeder::class); | ||||
|         $this->call(InvoiceTemplateSeeder::class); | ||||
|     } | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										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
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								public/images/default-avatar.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/images/default-avatar.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 32 KiB | 
| @ -1,4 +1,4 @@ | ||||
| { | ||||
|     "/assets/js/app.js": "/assets/js/app.js?id=0de16e5183b0d24fd95d", | ||||
|     "/assets/css/crater.css": "/assets/css/crater.css?id=361d275866b6299acb36" | ||||
|     "/assets/js/app.js": "/assets/js/app.js?id=2a5cfd8271e10bd501dc", | ||||
|     "/assets/css/crater.css": "/assets/css/crater.css?id=108e3a8d009e7d38018c" | ||||
| } | ||||
|  | ||||
| @ -14,7 +14,8 @@ Web Application is made using Laravel & VueJS while the Mobile Apps are built us | ||||
| 4. [Discord](#discord) | ||||
| 5. [Roadmap](#roadmap) | ||||
| 6. [Credits](#credits) | ||||
| 7. [License](#license) | ||||
| 7. [Help us translate](#translate) | ||||
| 8. [License](#license) | ||||
|  | ||||
| ## Documentation | ||||
|  | ||||
| @ -59,6 +60,9 @@ Join the Crater discord server to discuss: | ||||
| ## Credits | ||||
| Crater is a product of [Bytefury](https://bytefury.com) | ||||
|  | ||||
| ## Translate | ||||
| Help us translate on [Transifex](https://www.transifex.com/bytefury/crater-invoice) | ||||
|  | ||||
| ## License | ||||
| Crater is released under the Attribution Assurance License. | ||||
| See [LICENSE](LICENSE) for details. | ||||
|  | ||||
| @ -163,15 +163,10 @@ | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.state') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="billingState" | ||||
|                     :options="billingStates" | ||||
|                     :searchable="true" | ||||
|                     :show-labels="false" | ||||
|                     :placeholder="$t('general.select_state')" | ||||
|                     :disabled="isDisabledBillingState" | ||||
|                     track-by="id" | ||||
|                     label="name" | ||||
|                   <base-input | ||||
|                     v-model="billing.state" | ||||
|                     type="text" | ||||
|                     name="billingState" | ||||
|                   /> | ||||
|                 </div> | ||||
|               </div> | ||||
| @ -179,29 +174,14 @@ | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.city') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="billingCity" | ||||
|                     :options="billingCities" | ||||
|                     :searchable="true" | ||||
|                     :show-labels="false" | ||||
|                     :placeholder="$t('general.select_city')" | ||||
|                     :disabled="isDisabledBillingCity" | ||||
|                     track-by="id" | ||||
|                     label="name" | ||||
|                   <base-input | ||||
|                     v-model="billing.city" | ||||
|                     type="text" | ||||
|                     name="billingCity" | ||||
|                   /> | ||||
|                 </div> | ||||
|               </div> | ||||
|  | ||||
|               <!-- <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label">Zip Code</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-input | ||||
|                     v-model="billing.zip" | ||||
|                     type="text" | ||||
|                   /> | ||||
|                 </div> | ||||
|               </div> --> | ||||
|  | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.zip_code') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
| @ -294,15 +274,10 @@ | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.state') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="shippingState" | ||||
|                     :options="shippingStates" | ||||
|                     :searchable="true" | ||||
|                     :show-labels="false" | ||||
|                     :placeholder="$t('general.select_state')" | ||||
|                     :disabled="isDisabledShippingState" | ||||
|                     track-by="id" | ||||
|                     label="name" | ||||
|                   <base-input | ||||
|                     v-model="shipping.state" | ||||
|                     type="text" | ||||
|                     name="shippingState" | ||||
|                   /> | ||||
|                 </div> | ||||
|               </div> | ||||
| @ -310,15 +285,10 @@ | ||||
|               <div class="form-group row"> | ||||
|                 <label class="col-sm-4 col-form-label input-label">{{ $t('customers.city') }}</label> | ||||
|                 <div class="col-sm-7"> | ||||
|                   <base-select | ||||
|                     v-model="shippingCity" | ||||
|                     :options="shippingCities" | ||||
|                     :searchable="true" | ||||
|                     :show-labels="false" | ||||
|                     :placeholder="$t('general.select_city')" | ||||
|                     :disabled="isDisabledShippingCity" | ||||
|                     track-by="id" | ||||
|                     label="name" | ||||
|                   <base-input | ||||
|                     v-model="shipping.city" | ||||
|                     type="text" | ||||
|                     name="shippingCity" | ||||
|                   /> | ||||
|                 </div> | ||||
|               </div> | ||||
| @ -372,16 +342,8 @@ export default { | ||||
|     return { | ||||
|       isLoading: false, | ||||
|       countryList: [], | ||||
|       billingStates: [], | ||||
|       billingCities: [], | ||||
|       billingCountry: null, | ||||
|       billingState: null, | ||||
|       billingCity: null, | ||||
|       shippingStates: [], | ||||
|       shippingCities: [], | ||||
|       shippingCountry: null, | ||||
|       shippingState: null, | ||||
|       shippingCity: null, | ||||
|       isCopyFromBilling: false, | ||||
|       currencyList: [], | ||||
|       currency: '', | ||||
| @ -442,61 +404,14 @@ export default { | ||||
|     billingCountry () { | ||||
|       if (this.billingCountry) { | ||||
|         this.billing.country_id = this.billingCountry.id | ||||
|         this.isDisabledBillingState = false | ||||
|         this.fetchBillingStates(this.billingCountry.id) | ||||
|         this.billingState = null | ||||
|         this.billingCity = null | ||||
|         return true | ||||
|       } | ||||
|     }, | ||||
|     billingState () { | ||||
|       if (this.billingState) { | ||||
|         this.billing.state_id = this.billingState.id | ||||
|         this.isDisabledBillingCity = false | ||||
|         this.fetchBillingCities(this.billingState.id) | ||||
|         this.billingCity = null | ||||
|         return true | ||||
|       } | ||||
|       this.billingCity = null | ||||
|       this.isDisabledBillingCity = true | ||||
|     }, | ||||
|     billingCity () { | ||||
|       if (this.billingCity) { | ||||
|         this.billing.city_id = this.billingCity.id | ||||
|       } | ||||
|     }, | ||||
|     shippingCountry () { | ||||
|       if (this.shippingCountry) { | ||||
|         this.shipping.country_id = this.shippingCountry.id | ||||
|         this.isDisabledShippingState = false | ||||
|         this.fetchShippingStates(this.shippingCountry.id) | ||||
|         if (this.isCopyFromBilling) { | ||||
|           return true | ||||
|         } | ||||
|         this.shippingState = null | ||||
|         this.shippingCity = null | ||||
|         return true | ||||
|       } | ||||
|     }, | ||||
|     shippingState () { | ||||
|       if (this.shippingState) { | ||||
|         this.shipping.state_id = this.shippingState.id | ||||
|         this.isDisabledShippingCity = false | ||||
|         this.fetchShippingCities(this.shippingState.id) | ||||
|         if (this.isCopyFromBilling) { | ||||
|           this.isCopyFromBilling = false | ||||
|           return true | ||||
|         } | ||||
|         this.shippingCity = null | ||||
|         return true | ||||
|       } | ||||
|       this.shippingCity = null | ||||
|       this.isDisabledShippingCity = true | ||||
|     }, | ||||
|     shippingCity () { | ||||
|       if (this.shippingCity) { | ||||
|         this.shipping.city_id = this.shippingCity.id | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
| @ -529,16 +444,8 @@ export default { | ||||
|         addresses: [] | ||||
|       } | ||||
|  | ||||
|       this.billingStates = [] | ||||
|       this.billingCities = [] | ||||
|       this.billingCountry = null | ||||
|       this.billingState = null | ||||
|       this.billingCity = null | ||||
|       this.shippingStates = [] | ||||
|       this.shippingCities = [] | ||||
|       this.shippingCountry = null | ||||
|       this.shippingState = null | ||||
|       this.shippingCity = null | ||||
|  | ||||
|       this.billing = {...AddressStub} | ||||
|       this.shipping = {...AddressStub} | ||||
| @ -553,13 +460,9 @@ export default { | ||||
|         this.isCopyFromBilling = true | ||||
|         this.shipping = {...this.billing, type: 'shipping'} | ||||
|         this.shippingCountry = this.billingCountry | ||||
|         this.shippingState = this.billingState | ||||
|         this.shippingCity = this.billingCity | ||||
|       } else { | ||||
|         this.shipping = {...AddressStub, type: 'shipping'} | ||||
|         this.shippingCountry = null | ||||
|         this.shippingState = null | ||||
|         this.shippingCity = null | ||||
|       } | ||||
|     }, | ||||
|     async loadData () { | ||||
| @ -633,30 +536,6 @@ export default { | ||||
|       if (res) { | ||||
|         this.countryList = res.data.countries | ||||
|       } | ||||
|     }, | ||||
|     async fetchBillingStates (id) { | ||||
|       let res = await window.axios.get(`/api/states/${id}`) | ||||
|       if (res) { | ||||
|         this.billingStates = res.data.states | ||||
|       } | ||||
|     }, | ||||
|     async fetchBillingCities (id) { | ||||
|       let res = await window.axios.get(`/api/cities/${id}`) | ||||
|       if (res) { | ||||
|         this.billingCities = res.data.cities | ||||
|       } | ||||
|     }, | ||||
|     async fetchShippingStates (id) { | ||||
|       let res = await window.axios.get(`/api/states/${id}`) | ||||
|       if (res) { | ||||
|         this.shippingStates = res.data.states | ||||
|       } | ||||
|     }, | ||||
|     async fetchShippingCities (id) { | ||||
|       let res = await window.axios.get(`/api/cities/${id}`) | ||||
|       if (res) { | ||||
|         this.shippingCities = res.data.cities | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -87,5 +87,16 @@ export default { | ||||
|     } catch (e) { | ||||
|       console.log(e) | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   checkValidUrl (url) { | ||||
|     let pattern = new RegExp('^(https?:\\/\\/)?' + // protocol | ||||
|       '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name | ||||
|       '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address | ||||
|       '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path | ||||
|       '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string | ||||
|       '(\\#[-a-z\\d_]*)?$', 'i') // fragment locator | ||||
|  | ||||
|     return !!pattern.test(url) | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -1,818 +0,0 @@ | ||||
| export default { | ||||
|   navigation: { | ||||
|     // key : 'singular | plural' | ||||
|     dashboard: 'Dashboard', | ||||
|     customers: 'Customers', | ||||
|     items: 'Items', | ||||
|     invoices: 'Invoices', | ||||
|     expenses: 'Expenses', | ||||
|     estimates: 'Estimates', | ||||
|     payments: 'Payments', | ||||
|     reports: 'Reports', | ||||
|     settings: 'Settings', | ||||
|     logout: 'Logout' | ||||
|   }, | ||||
|   general: { | ||||
|     view_pdf: 'View PDF', | ||||
|     download_pdf: 'Download PDF', | ||||
|     save: 'Save', | ||||
|     cancel: 'Cancel', | ||||
|     update: 'Update', | ||||
|     download: 'Download', | ||||
|     from_date: 'From Date', | ||||
|     to_date: 'To Date', | ||||
|     from: 'From', | ||||
|     to: 'To', | ||||
|     go_back: 'Go Back', | ||||
|     back_to_login: 'Back to Login?', | ||||
|     home: 'Home', | ||||
|     filter: 'Filter', | ||||
|     delete: 'Delete', | ||||
|     edit: 'Edit', | ||||
|     view: 'View', | ||||
|     add_new_item: 'Add New Item', | ||||
|     clear_all: 'Clear All', | ||||
|     showing: 'Showing', | ||||
|     of: 'of', | ||||
|     actions: 'Actions', | ||||
|     subtotal: 'SUBTOTAL', | ||||
|     discount: 'DISCOUNT', | ||||
|     fixed: 'Fixed', | ||||
|     percentage: 'Percentage', | ||||
|     tax: 'TAX', | ||||
|     total_amount: 'TOTAL AMOUNT', | ||||
|     bill_to: 'Bill to', | ||||
|     ship_to: 'Ship to', | ||||
|     due: 'Due', | ||||
|     draft: 'Draft', | ||||
|     sent: 'Sent', | ||||
|     all: 'All', | ||||
|     select_all: 'Select All', | ||||
|     choose_file: 'Click here to choose a file', | ||||
|     choose_template: 'Choose a template', | ||||
|     choose: 'Choose', | ||||
|     remove: 'Remove', | ||||
|     powered_by: 'Powered by', | ||||
|     bytefury: 'Bytefury', | ||||
|     select_a_status: 'Select a status', | ||||
|     select_a_tax: 'Select a tax', | ||||
|     search: 'Search', | ||||
|     are_you_sure: 'Are you sure?', | ||||
|     list_is_empty: 'List is empty.', | ||||
|     no_tax_found: 'No tax found!', | ||||
|     four_zero_four: '404', | ||||
|     you_got_lost: 'Whoops! You got Lost!', | ||||
|     go_home: 'Go Home', | ||||
|  | ||||
|     setting_updated: 'Setting updated successfully', | ||||
|     select_state: 'Select state', | ||||
|     select_country: 'Select Country', | ||||
|     select_city: 'Select City', | ||||
|     street_1: 'Street 1', | ||||
|     street_2: 'Street 2', | ||||
|     action_failed: 'Action Failed' | ||||
|   }, | ||||
|   dashboard: { | ||||
|     select_year: 'Select year', | ||||
|     cards: { | ||||
|       due_amount: 'Amount Due', | ||||
|       customers: 'Customers', | ||||
|       invoices: 'Invoices', | ||||
|       estimates: 'Estimates' | ||||
|     }, | ||||
|     chart_info: { | ||||
|       total_sales: 'Sales', | ||||
|       total_receipts: 'Receipts', | ||||
|       total_expense: 'Expenses', | ||||
|       net_income: 'Net Income', | ||||
|       year: 'Select year' | ||||
|     }, | ||||
|     weekly_invoices: { | ||||
|       title: 'Weekly Invoices' | ||||
|     }, | ||||
|     monthly_chart: { | ||||
|       title: 'Sales & Expenses' | ||||
|     }, | ||||
|     recent_invoices_card: { | ||||
|       title: 'Due Invoices', | ||||
|       due_on: 'Due On', | ||||
|       customer: 'Customer', | ||||
|       amount_due: 'Amount Due', | ||||
|       actions: 'Actions', | ||||
|       view_all: 'View All' | ||||
|     }, | ||||
|     recent_estimate_card: { | ||||
|       title: 'Recent Estimates', | ||||
|       date: 'Date', | ||||
|       customer: 'Customer', | ||||
|       amount_due: 'Amount Due', | ||||
|       actions: 'Actions', | ||||
|       view_all: 'View All' | ||||
|     } | ||||
|   }, | ||||
|   tax_types: { | ||||
|     name: 'Name', | ||||
|     description: 'Description', | ||||
|     percent: 'Percent', | ||||
|     compound_tax: 'Compound Tax' | ||||
|   }, | ||||
|   customers: { | ||||
|     title: 'Customers', | ||||
|     add_customer: 'Add Customer', | ||||
|     contacts_list: 'Customer List', | ||||
|     name: 'Name', | ||||
|     display_name: 'Display Name', | ||||
|     primary_contact_name: 'Primary Contact Name', | ||||
|     contact_name: 'Contact Name', | ||||
|     amount_due: 'Amount Due', | ||||
|     email: 'Email', | ||||
|     address: 'Address', | ||||
|     phone: 'Phone', | ||||
|     website: 'Website', | ||||
|     country: 'Country', | ||||
|     state: 'State', | ||||
|     city: 'City', | ||||
|     zip_code: 'Zip Code', | ||||
|     added_on: 'Added On', | ||||
|     action: 'Action', | ||||
|     password: 'Password', | ||||
|     street_number: 'Street Number', | ||||
|     primary_currency: 'Primary Currency', | ||||
|     add_new_customer: 'Add New Customer', | ||||
|     save_customer: 'Save Customer', | ||||
|     update_customer: 'Update Customer', | ||||
|     customer: 'Customer | Customers', | ||||
|     new_customer: 'New Customer', | ||||
|     edit_customer: 'Edit Customer', | ||||
|     basic_info: 'Basic Info', | ||||
|     billing_address: 'Billing Address', | ||||
|     shipping_address: 'Shipping Address', | ||||
|     copy_billing_address: 'Copy from Billing', | ||||
|     no_customers: 'No customers yet!', | ||||
|     no_customers_found: 'No customers found!', | ||||
|     list_of_customers: 'This section will contain the list of customers.', | ||||
|     primary_display_name: 'Primary Display Name', | ||||
|     select_currency: 'Select currency', | ||||
|     select_a_customer: 'Select a customer', | ||||
|     type_or_click: 'Type or click to select', | ||||
|  | ||||
|     confirm_delete: 'You will not be able to recover this Customer | You will not be able to recover these Customers', | ||||
|     created_message: 'Customer created successfully', | ||||
|     updated_message: 'Customer updated successfully', | ||||
|     deleted_message: 'Customer deleted successfully | Customers deleted successfully' | ||||
|   }, | ||||
|   items: { | ||||
|     title: 'Items', | ||||
|     items_list: 'Items List', | ||||
|     name: 'Name', | ||||
|     unit: 'Unit', | ||||
|     description: 'Description', | ||||
|     added_on: 'Added On', | ||||
|     price: 'Price', | ||||
|     date_of_creation: 'Date Of Creation', | ||||
|     action: 'Action', | ||||
|     add_item: 'Add Item', | ||||
|     save_item: 'Save Item', | ||||
|     update_item: 'Update Item', | ||||
|     item: 'Item | Items', | ||||
|     add_new_item: 'Add New Item', | ||||
|     new_item: 'New Item', | ||||
|     edit_item: 'Edit Item', | ||||
|     no_items: 'No items yet!', | ||||
|     list_of_items: 'This section will contain the list of items.', | ||||
|     select_a_unit: 'select unit', | ||||
|  | ||||
|     item_attached_message: 'Cannot delete an item which is already in use', | ||||
|     confirm_delete: 'You will not be able to recover this Item | You will not be able to recover these Items', | ||||
|     created_message: 'Item created successfully', | ||||
|     updated_message: 'Item updated successfully', | ||||
|     deleted_message: 'Item deleted successfully | Items deleted successfully' | ||||
|   }, | ||||
|   estimates: { | ||||
|     title: 'Estimates', | ||||
|     estimate: 'Estimate | Estimates', | ||||
|     estimates_list: 'Estimates List', | ||||
|     days: '{days} Days', | ||||
|     months: '{months} Month', | ||||
|     years: '{years} Year', | ||||
|     all: 'All', | ||||
|     paid: 'Paid', | ||||
|     unpaid: 'Unpaid', | ||||
|     customer: 'CUSTOMER', | ||||
|     ref_no: 'REF NO.', | ||||
|     number: 'NUMBER', | ||||
|     amount_due: 'AMOUNT DUE', | ||||
|     partially_paid: 'Partially Paid', | ||||
|     total: 'Total', | ||||
|     discount: 'Discount', | ||||
|     sub_total: 'Sub Total', | ||||
|     estimate_number: 'Estimate Number', | ||||
|     ref_number: 'Ref Number', | ||||
|     contact: 'Contact', | ||||
|     add_item: 'Add an Item', | ||||
|     date: 'Date', | ||||
|     due_date: 'Due Date', | ||||
|     expiry_date: 'Expiry Date', | ||||
|     status: 'Status', | ||||
|     add_tax: 'Add Tax', | ||||
|     amount: 'Amount', | ||||
|     action: 'Action', | ||||
|     notes: 'Notes', | ||||
|     tax: 'Tax', | ||||
|     estimate_template: 'Template', | ||||
|     convert_to_invoice: 'Convert to Invoice', | ||||
|     mark_as_sent: 'Mark as Sent', | ||||
|     send_estimate: 'Send Estimate', | ||||
|     record_payment: 'Record Payment', | ||||
|     add_estimate: 'Add Estimate', | ||||
|     save_estimate: 'Save Estimate', | ||||
|     confirm_conversion: 'You want to convert this Estimate into Invoice?', | ||||
|     conversion_message: 'Invoice created successful', | ||||
|     confirm_send_estimate: 'This estimate will be sent via email to the customer', | ||||
|     confirm_mark_as_sent: 'This estimate will be marked as sent', | ||||
|     confirm_mark_as_accepted: 'This estimate will be marked as Accepted', | ||||
|     confirm_mark_as_rejected: 'This estimate will be marked as Rejected', | ||||
|     no_matching_estimates: 'There are no matching estimates!', | ||||
|     mark_as_sent_successfully: 'Estimate marked as sent successfully', | ||||
|     send_estimate_successfully: 'Estimate sent successfully', | ||||
|     errors: { | ||||
|       required: 'Field is required' | ||||
|     }, | ||||
|     accepted: 'Accepted', | ||||
|     sent: 'Sent', | ||||
|     draft: 'Draft', | ||||
|     declined: 'Declined', | ||||
|     new_estimate: 'New Estimate', | ||||
|     add_new_estimate: 'Add New Estimate', | ||||
|     update_Estimate: 'Update Estimate', | ||||
|     edit_estimate: 'Edit Estimate', | ||||
|     items: 'items', | ||||
|     Estimate: 'Estimate | Estimates', | ||||
|     add_new_tax: 'Add New Tax', | ||||
|     no_estimates: 'No estimates yet!', | ||||
|     list_of_estimates: 'This section will contain the list of estimates.', | ||||
|     mark_as_rejected: 'Mark as rejected', | ||||
|     mark_as_accepted: 'Mark as accepted', | ||||
|  | ||||
|     marked_as_accepted_message: 'Estimate marked as accepted', | ||||
|     marked_as_rejected_message: 'Estimate marked as rejected', | ||||
|     confirm_delete: 'You will not be able to recover this Estimate | You will not be able to recover these Estimates', | ||||
|     created_message: 'Estimate created successfully', | ||||
|     updated_message: 'Estimate updated successfully', | ||||
|     deleted_message: 'Estimate deleted successfully | Estimates deleted successfully', | ||||
|     user_email_does_not_exist: 'User email does not exist', | ||||
|     something_went_wrong: 'something went wrong', | ||||
|     item: { | ||||
|       title: 'Item Title', | ||||
|       description: 'Description', | ||||
|       quantity: 'Quantity', | ||||
|       price: 'Price', | ||||
|       discount: 'Discount', | ||||
|       total: 'Total', | ||||
|       total_discount: 'Total Discount', | ||||
|       sub_total: 'Sub Total', | ||||
|       tax: 'Tax', | ||||
|       amount: 'Amount', | ||||
|       select_an_item: 'Type or click to select an item', | ||||
|       type_item_description: 'Type Item Description (optional)' | ||||
|     } | ||||
|   }, | ||||
|   invoices: { | ||||
|     title: 'Invoices', | ||||
|     invoices_list: 'Invoices List', | ||||
|     days: '{days} Days', | ||||
|     months: '{months} Month', | ||||
|     years: '{years} Year', | ||||
|     all: 'All', | ||||
|     paid: 'Paid', | ||||
|     unpaid: 'Unpaid', | ||||
|     customer: 'CUSTOMER', | ||||
|     paid_status: 'PAID STATUS', | ||||
|     ref_no: 'REF NO.', | ||||
|     number: 'NUMBER', | ||||
|     amount_due: 'AMOUNT DUE', | ||||
|     partially_paid: 'Partially Paid', | ||||
|     total: 'Total', | ||||
|     discount: 'Discount', | ||||
|     sub_total: 'Sub Total', | ||||
|     invoice: 'Invoice | Invoices', | ||||
|     invoice_number: 'Invoice Number', | ||||
|     ref_number: 'Ref Number', | ||||
|     contact: 'Contact', | ||||
|     add_item: 'Add an Item', | ||||
|     date: 'Date', | ||||
|     due_date: 'Due Date', | ||||
|     status: 'Status', | ||||
|     add_tax: 'Add Tax', | ||||
|     amount: 'Amount', | ||||
|     action: 'Action', | ||||
|     notes: 'Notes', | ||||
|     view: 'View', | ||||
|     send_invoice: 'Send Invoice', | ||||
|     invoice_template: 'Invoice Template', | ||||
|     template: 'Template', | ||||
|     mark_as_sent: 'Mark as sent', | ||||
|     confirm_send_invoice: 'This invoice will be sent via email to the customer', | ||||
|     invoice_mark_as_sent: 'This invoice will be marked as sent', | ||||
|     confirm_send: 'This invoice will be sent via email to the customer', | ||||
|     invoice_date: 'Invoice Date', | ||||
|     record_payment: 'Record Payment', | ||||
|     add_new_invoice: 'Add New Invoice', | ||||
|     update_expense: 'Update Expense', | ||||
|     edit_invoice: 'Edit Invoice', | ||||
|     new_invoice: 'New Invoice', | ||||
|     save_invoice: 'Save Invoice', | ||||
|     update_invoice: 'Update Invoice', | ||||
|     add_new_tax: 'Add New Tax', | ||||
|     no_invoices: 'No Invoices yet!', | ||||
|     list_of_invoices: 'This section will contain the list of invoices.', | ||||
|     select_invoice: 'Select Invoice', | ||||
|     no_matching_invoices: 'There are no matching invoices!', | ||||
|     mark_as_sent_successfully: 'Invoice marked as sent successfully', | ||||
|     send_invoice_successfully: 'Invoice sent successfully', | ||||
|     item: { | ||||
|       title: 'Item Title', | ||||
|       description: 'Description', | ||||
|       quantity: 'Quantity', | ||||
|       price: 'Price', | ||||
|       discount: 'Discount', | ||||
|       total: 'Total', | ||||
|       total_discount: 'Total Discount', | ||||
|       sub_total: 'Sub Total', | ||||
|       tax: 'Tax', | ||||
|       amount: 'Amount', | ||||
|       select_an_item: 'Type or click to select an item', | ||||
|       type_item_description: 'Type Item Description (optional)' | ||||
|     }, | ||||
|  | ||||
|     payment_attached_message: 'One of the selected invoices already have a payment attached to it. Make sure to delete the attached payments first in order to go ahead with the removal', | ||||
|     confirm_delete: 'You will not be able to recover this Invoice | You will not be able to recover these Invoices', | ||||
|     created_message: 'Invoice created successfully', | ||||
|     updated_message: 'Invoice updated successfully', | ||||
|     deleted_message: 'Invoice deleted successfully | Invoices deleted successfully', | ||||
|     marked_as_sent_message: 'Invoice marked as sent successfully', | ||||
|     user_email_does_not_exist: 'User email does not exist', | ||||
|     something_went_wrong: 'something went wrong', | ||||
|     invalid_due_amount_message: 'Total Invoice amount cannot be less than total paid amount for this Invoice. Please update the invoice or delete the associated payments to continue.' | ||||
|   }, | ||||
|   credit_notes: { | ||||
|     title: 'Credit Notes', | ||||
|     credit_notes_list: 'Credit Notes List', | ||||
|     // Fields | ||||
|     credit_notes: 'Credit Notes', | ||||
|     contact: 'Contact', | ||||
|     date: 'Date', | ||||
|     amount: 'Amount', | ||||
|     action: 'Action', | ||||
|     credit_number: 'Credit Number', | ||||
|     notes: 'Notes', | ||||
|     confirm_delete: 'Do you want to delete this credit note?', | ||||
|     item: { | ||||
|       title: 'Item Title', | ||||
|       description: 'Description', | ||||
|       quantity: 'Quantity', | ||||
|       price: 'Price', | ||||
|       discount: 'Discount', | ||||
|       total: 'Total', | ||||
|       total_discount: 'Total Discount', | ||||
|       sub_total: 'Sub Total', | ||||
|       tax: 'Tax' | ||||
|     } | ||||
|   }, | ||||
|   payments: { | ||||
|     title: 'Payments', | ||||
|     payments_list: 'Payments List', | ||||
|     record_payment: 'Record Payment', | ||||
|     // Fields | ||||
|     customer: 'Customer', | ||||
|     date: 'Date', | ||||
|     amount: 'Amount', | ||||
|     action: 'Action', | ||||
|     payment_number: 'Payment Number', | ||||
|     payment_mode: 'Payment Mode', | ||||
|     invoice: 'Invoice', | ||||
|     note: 'Note', | ||||
|     add_payment: 'Add Payment', | ||||
|     new_payment: 'New Payment', | ||||
|     edit_payment: 'Edit Payment', | ||||
|     view_payment: 'View Payment', | ||||
|     add_new_payment: 'Add New Payment', | ||||
|     save_payment: 'Save Payment', | ||||
|     update_payment: 'Update Payment', | ||||
|     payment: 'Payment | Payments', | ||||
|     no_payments: 'No payments yet!', | ||||
|     list_of_payments: 'This section will contain the list of payments.', | ||||
|     select_payment_mode: 'Select payment mode', | ||||
|  | ||||
|     confirm_delete: 'You will not be able to recover this Payment | You will not be able to recover these Payments', | ||||
|     created_message: 'Payment created successfully', | ||||
|     updated_message: 'Payment updated successfully', | ||||
|     deleted_message: 'Payment deleted successfully | Payments deleted successfully', | ||||
|     invalid_amount_message: 'Payment amount is invalid' | ||||
|   }, | ||||
|   expenses: { | ||||
|     title: 'Expenses', | ||||
|     expenses_list: 'Expenses List', | ||||
|     // Fields | ||||
|     expense_title: 'Title', | ||||
|     contact: 'Contact', | ||||
|     category: 'Category', | ||||
|     from_date: 'From Date', | ||||
|     to_date: 'To Date', | ||||
|     expense_date: 'Date', | ||||
|     description: 'Description', | ||||
|     receipt: 'Receipt', | ||||
|     amount: 'Amount', | ||||
|     action: 'Action', | ||||
|     note: 'Note', | ||||
|     category_id: 'Category Id', | ||||
|     date: 'Expense Date', | ||||
|     add_expense: 'Add Expense', | ||||
|     add_new_expense: 'Add New Expense', | ||||
|     save_expense: 'Save Expense', | ||||
|     update_expense: 'Update Expense', | ||||
|     download_receipt: 'Download Receipt', | ||||
|     edit_expense: 'Edit Expense', | ||||
|     new_expense: 'New Expense', | ||||
|     expense: 'Expense | Expenses', | ||||
|     no_expenses: 'No expenses yet!', | ||||
|     list_of_expenses: 'This section will contain the list of expenses.', | ||||
|  | ||||
|     confirm_delete: 'You will not be able to recover this Expense | You will not be able to recover these Expenses', | ||||
|     created_message: 'Expense created successfully', | ||||
|     updated_message: 'Expense updated successfully', | ||||
|     deleted_message: 'Expense deleted successfully | Expenses deleted successfully', | ||||
|     categories: { | ||||
|       categories_list: 'Categories List', | ||||
|       title: 'Title', | ||||
|       name: 'Name', | ||||
|       description: 'Description', | ||||
|       amount: 'Amount', | ||||
|       actions: 'Actions', | ||||
|       add_category: 'Add Category', | ||||
|       new_category: 'New Category', | ||||
|       category: 'Category | Categories', | ||||
|       select_a_category: 'Select a category' | ||||
|     } | ||||
|   }, | ||||
|   login: { | ||||
|     email: 'Email', | ||||
|     password: 'Password', | ||||
|     forgot_password: 'Forgot Password?', | ||||
|     or_signIn_with: 'or Sign in with:', | ||||
|     login: 'Login', | ||||
|     register: 'Register', | ||||
|     reset_password: 'Reset Password', | ||||
|     password_reset_successfully: 'Password Reset Successfully', | ||||
|     enter_email: 'Enter email', | ||||
|     enter_password: 'Enter Password', | ||||
|     retype_password: 'Retype Password', | ||||
|     login_placeholder: 'mail@example.com' | ||||
|   }, | ||||
|   reports: { | ||||
|     title: 'Report', | ||||
|     from_date: 'From Date', | ||||
|     to_date: 'To Date', | ||||
|     status: 'Status', | ||||
|     paid: 'Paid', | ||||
|     unpaid: 'Unpaid', | ||||
|     download_pdf: 'Download PDF', | ||||
|     view_pdf: 'View PDF', | ||||
|     update_report: 'Update Report', | ||||
|     report: 'Report | Reports', | ||||
|     profit_loss: { | ||||
|       profit_loss: 'Profit & Loss', | ||||
|       to_date: 'To Date', | ||||
|       from_date: 'From Date', | ||||
|       date_range: 'Select Date Range' | ||||
|     }, | ||||
|     sales: { | ||||
|       sales: 'Sales', | ||||
|       date_range: 'Select Date Range', | ||||
|       to_date: 'To Date', | ||||
|       from_date: 'From Date', | ||||
|       report_type: 'Report Type' | ||||
|     }, | ||||
|     taxes: { | ||||
|       taxes: 'Taxes', | ||||
|       to_date: 'To Date', | ||||
|       from_date: 'From Date', | ||||
|       date_range: 'Select Date Range' | ||||
|     }, | ||||
|     errors: { | ||||
|       required: 'Field is required' | ||||
|     }, | ||||
|     invoices: { | ||||
|       invoice: 'Invoice', | ||||
|       invoice_date: 'Invoice Date', | ||||
|       due_date: 'Due Date', | ||||
|       amount: 'Amount', | ||||
|       contact_name: 'Contact Name', | ||||
|       status: 'Status' | ||||
|     }, | ||||
|     estimates: { | ||||
|       estimate: 'Estimate', | ||||
|       estimate_date: 'Estimate Date', | ||||
|       due_date: 'Due Date', | ||||
|       estimate_number: 'Estimate Number', | ||||
|       ref_number: 'Ref Number', | ||||
|       amount: 'Amount', | ||||
|       contact_name: 'Contact Name', | ||||
|       status: 'Status' | ||||
|     }, | ||||
|     expenses: { | ||||
|       expenses: 'Expenses', | ||||
|       category: 'Category', | ||||
|       date: 'Date', | ||||
|       amount: 'Amount', | ||||
|       to_date: 'To Date', | ||||
|       from_date: 'From Date', | ||||
|       date_range: 'Select Date Range' | ||||
|     } | ||||
|   }, | ||||
|   settings: { | ||||
|     menu_title: { | ||||
|       account_settings: 'Account Settings', | ||||
|       company_information: 'Company Information', | ||||
|       preferences: 'Preferences', | ||||
|       notifications: 'Notifications', | ||||
|       tax_types: 'Tax Types', | ||||
|       expense_category: 'Expense Categories', | ||||
|       update_app: 'Update App' | ||||
|     }, | ||||
|     title: 'Settings', | ||||
|     setting: 'Settings | Settings', | ||||
|     general: 'General', | ||||
|     language: 'Language', | ||||
|     primary_currency: 'Primary Currency', | ||||
|     timezone: 'Time Zone', | ||||
|     date_format: 'Date Format', | ||||
|     currencies: { | ||||
|       title: 'Currencies', | ||||
|       currency: 'Currency | Currencies', | ||||
|       currencies_list: 'Currencies List', | ||||
|       select_currency: 'Select Currency', | ||||
|       name: 'Name', | ||||
|       code: 'Code', | ||||
|       symbol: 'Symbol', | ||||
|       precision: 'Precision', | ||||
|       thousand_separator: 'Thousand Separator', | ||||
|       decimal_separator: 'Decimal Separator', | ||||
|       position: 'Position', | ||||
|       position_of_symbol: 'Position Of Symbol', | ||||
|       right: 'Right', | ||||
|       left: 'Left', | ||||
|       action: 'Action', | ||||
|       add_currency: 'Add Currency' | ||||
|     }, | ||||
|     mail: { | ||||
|       host: 'Mail Host', | ||||
|       port: 'Mail Port', | ||||
|       driver: 'Mail Driver', | ||||
|       secret: 'Secret', | ||||
|       mailgun_secret: 'Mailgun Secret', | ||||
|       mailgun_domain: 'Domain', | ||||
|       mailgun_endpoint: 'Mailgun Endpoint', | ||||
|       ses_secret: 'SES Secret', | ||||
|       ses_key: 'SES Key', | ||||
|       password: 'Mail Password', | ||||
|       username: 'Mail Username', | ||||
|       mail_config: 'Mail Configuration', | ||||
|       from_name: 'From Mail Name', | ||||
|       from_mail: 'From Mail Address', | ||||
|       encryption: 'Mail Encryption', | ||||
|       mail_config_desc: 'Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc.' | ||||
|     }, | ||||
|     pdf: { | ||||
|       title: 'PDF Setting', | ||||
|       footer_text: 'Footer Text', | ||||
|       pdf_layout: 'PDF Layout' | ||||
|     }, | ||||
|     company_info: { | ||||
|       company_info: 'Company info', | ||||
|       company_name: 'Company Name', | ||||
|       company_logo: 'Company Logo', | ||||
|       section_description: 'Information about your company that will be displayed on invoices, estimates and other documents created by Crater.', | ||||
|       phone: 'Phone', | ||||
|       country: 'Country', | ||||
|       state: 'State', | ||||
|       city: 'City', | ||||
|       address: 'Address', | ||||
|       zip: 'Zip', | ||||
|       save: 'Save', | ||||
|       updated_message: 'Company information updated successfully' | ||||
|     }, | ||||
|     account_settings: { | ||||
|       name: 'Name', | ||||
|       email: 'Email', | ||||
|       password: 'Password', | ||||
|       confirm_password: 'Confirm Password', | ||||
|       account_settings: 'Account Settings', | ||||
|       save: 'Save', | ||||
|       section_description: 'You can update your name, email & password using the form below.', | ||||
|       updated_message: 'Account Settings updated successfully' | ||||
|     }, | ||||
|     user_profile: { | ||||
|       name: 'Name', | ||||
|       email: 'Email', | ||||
|       password: 'Password', | ||||
|       confirm_password: 'Confirm Password' | ||||
|     }, | ||||
|     notification: { | ||||
|       title: 'Notification', | ||||
|       email: 'Send Notifications to', | ||||
|       description: 'Which email notifications would you like to receive when something changes?', | ||||
|       invoice_viewed: 'Invoice viewed', | ||||
|       invoice_viewed_desc: 'When your customer views the invoice sent via crater dashboard.', | ||||
|       estimate_viewed: 'Estimate viewed', | ||||
|       estimate_viewed_desc: 'When your customer views the estimate sent via crater dashboard.', | ||||
|       save: 'Save', | ||||
|       email_save_message: 'Email saved successfully', | ||||
|       please_enter_email: 'Please Enter Email' | ||||
|     }, | ||||
|     tax_types: { | ||||
|       title: 'Tax Types', | ||||
|       add_tax: 'Add Tax', | ||||
|       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', | ||||
|       tax_settings: 'Tax Settings', | ||||
|       tax_per_item: 'Tax Per Item', | ||||
|       tax_name: 'Tax Name', | ||||
|       compound_tax: 'Compound Tax', | ||||
|       percent: 'Percent', | ||||
|       action: 'Action', | ||||
|       tax_setting_description: 'Enable this if you want to add taxes to individual invoice items. By default, taxes are added directly to the invoice.', | ||||
|       created_message: 'Tax type created successfully', | ||||
|       updated_message: 'Tax type updated successfully', | ||||
|       deleted_message: 'Tax type deleted successfully', | ||||
|       confirm_delete: 'You will not be able to recover this Tax Type', | ||||
|       already_in_use: 'Tax is already in use' | ||||
|     }, | ||||
|     expense_category: { | ||||
|       title: 'Expense Categories', | ||||
|       action: 'Action', | ||||
|       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', | ||||
|       category_name: 'Category Name', | ||||
|       category_description: 'Description', | ||||
|       created_message: 'Expense Category created successfully', | ||||
|       deleted_message: 'Expense category deleted successfully', | ||||
|       updated_message: 'Expense category updated successfully', | ||||
|       confirm_delete: 'You will not be able to recover this Expense Category', | ||||
|       already_in_use: 'Category is already in use' | ||||
|     }, | ||||
|     preferences: { | ||||
|       currency: 'Currency', | ||||
|       language: 'Language', | ||||
|       time_zone: 'Time Zone', | ||||
|       fiscal_year: 'Financial Year', | ||||
|       date_format: 'Date Format', | ||||
|       discount_setting: 'Discount Setting', | ||||
|       discount_per_item: 'Discount Per Item ', | ||||
|       discount_setting_description: 'Enable this if you want to add Discount to individual invoice items. By default, Discount are added directly to the invoice.', | ||||
|       save: 'Save', | ||||
|       preference: 'Preference | Preferences', | ||||
|       general_settings: 'Default preferences for the system.', | ||||
|       updated_message: 'Preferences updated successfully', | ||||
|       select_language: 'select language', | ||||
|       select_time_zone: 'select Time Zone', | ||||
|       select_date_formate: 'select Date Formate', | ||||
|       select_financial_year: 'select financial year' | ||||
|     }, | ||||
|     update_app: { | ||||
|       title: 'Update App', | ||||
|       description: 'You can easily update Crater by checking for a new update by clicking the button below', | ||||
|       check_update: 'Check for updates', | ||||
|       avail_update: 'New Update available', | ||||
|       next_version: 'Next version', | ||||
|       update: 'Update Now', | ||||
|       update_progress: 'Update in progress...', | ||||
|       progress_text: 'It will just take a few minutes. Please do not refresh the screen or close the window before the update finishes', | ||||
|       update_success: 'App has been updated successfully', | ||||
|       latest_message: 'No update available! You are on the latest version.', | ||||
|       current_version: 'Current Version' | ||||
|     } | ||||
|   }, | ||||
|   wizard: { | ||||
|     account_info: 'Account Information', | ||||
|     account_info_desc: 'Below details will be used to create the main Administrator account. Also you can change the details anytime after logging in.', | ||||
|     name: 'Name', | ||||
|     email: 'Email', | ||||
|     password: 'Password', | ||||
|     confirm_password: 'Confirm Password', | ||||
|     save_cont: 'Save & Continue', | ||||
|     company_info: 'Company Information', | ||||
|     company_info_desc: 'This information will be displayed on invoices. Note that you can edit this later on settings page.', | ||||
|     company_name: 'Company Name', | ||||
|     company_logo: 'Company Logo', | ||||
|     logo_preview: 'Logo Preview', | ||||
|     preferences: 'Preferences', | ||||
|     preferences_desc: 'Default preferences for the system.', | ||||
|     country: 'Country', | ||||
|     state: 'State', | ||||
|     city: 'City', | ||||
|     address: 'Address', | ||||
|     street: 'Street1' | 'Street2', | ||||
|     phone: 'Phone', | ||||
|     zip_code: 'Zip Code', | ||||
|     go_back: 'Go Back', | ||||
|     currency: 'Currency', | ||||
|     language: 'Language', | ||||
|     time_zone: 'Time Zone', | ||||
|     fiscal_year: 'Financial Year', | ||||
|     date_format: 'Date Format', | ||||
|     from_address: 'From Address', | ||||
|     username: 'Username', | ||||
|     next: 'Next', | ||||
|     continue: 'Continue', | ||||
|     skip: 'Skip', | ||||
|     database: { | ||||
|       database: 'Site URL & Database', | ||||
|       connection: 'Database Connection', | ||||
|       host: 'Database Host', | ||||
|       port: 'Database Port', | ||||
|       password: 'Database Password', | ||||
|       app_url: 'App URL', | ||||
|       username: 'Database Username', | ||||
|       db_name: 'Database Name', | ||||
|       desc: 'Create a database on your server and set the credentials using the form below.' | ||||
|     }, | ||||
|     permissions: { | ||||
|       permissions: 'Permissions', | ||||
|       permission_desc: 'Below is the list of folder permissions which are required in order for the app to work. If the permission check fails, make sure to update your folder permissions.' | ||||
|     }, | ||||
|     mail: { | ||||
|       host: 'Mail Host', | ||||
|       port: 'Mail Port', | ||||
|       driver: 'Mail Driver', | ||||
|       secret: 'Secret', | ||||
|       mailgun_secret: 'Mailgun Secret', | ||||
|       mailgun_domain: 'Domain', | ||||
|       mailgun_endpoint: 'Mailgun Endpoint', | ||||
|       ses_secret: 'SES Secret', | ||||
|       ses_key: 'SES Key', | ||||
|       password: 'Mail Password', | ||||
|       username: 'Mail Username', | ||||
|       mail_config: 'Mail Configuration', | ||||
|       from_name: 'From Mail Name', | ||||
|       from_mail: 'From Mail Address', | ||||
|       encryption: 'Mail Encryption', | ||||
|       mail_config_desc: 'Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc.' | ||||
|     }, | ||||
|     req: { | ||||
|       system_req: 'System Requirements', | ||||
|       php_req_version: 'Php (version {version} required)', | ||||
|       check_req: 'Check Requirements', | ||||
|       system_req_desc: 'Crater has a few server requirements. Make sure that your server has the required php version and all the extensions mentioned below.' | ||||
|     }, | ||||
|     errors: { | ||||
|       migrate_failed: 'Migrate Failed', | ||||
|       database_variables_save_error: 'Unable to connect to the DB with Provided Values.', | ||||
|       mail_variables_save_error: 'Email configuration failed.', | ||||
|       connection_failed: 'Database connection failed', | ||||
|       database_should_be_empty: 'Database should be empty' | ||||
|     }, | ||||
|     success: { | ||||
|       mail_variables_save_successfully: 'Email configured successfully', | ||||
|       database_variables_save_successfully: 'Database configured successfully.' | ||||
|     } | ||||
|   }, | ||||
|   layout_login: { | ||||
|     copyright_crater: 'Copyright @ Crater - 2019', | ||||
|     super_simple_invoicing: 'Super Simple Invoicing', | ||||
|     for_freelancer: 'for Freelancers &', | ||||
|     small_businesses: 'Small Businesses ', | ||||
|     crater_help: 'Crater helps you track expenses, record payments & generate beautiful', | ||||
|     invoices_and_estimates: 'invoices & estimates with ability to choose multiple templates.' | ||||
|   }, | ||||
|   validation: { | ||||
|     invalid_url: 'Invalid url (ex: http://www.crater.com)', | ||||
|     required: 'Field is required', | ||||
|     email_incorrect: 'Incorrect Email.', | ||||
|     email_already_taken: 'The email has already been taken.', | ||||
|     email_does_not_exist: "User with given email doesn't exist", | ||||
|     send_reset_link: 'Send Reset Link', | ||||
|     not_yet: 'Not yet? Send it again', | ||||
|     password_min_length: 'Password must contain {count} characters', | ||||
|     name_min_length: 'Name must have at least {count} letters.', | ||||
|     enter_valid_tax_rate: 'Enter valid tax rate', | ||||
|     numbers_only: 'Numbers Only.', | ||||
|     characters_only: 'Characters Only.', | ||||
|     password_incorrect: 'Passwords must be identical', | ||||
|     password_length: 'Password must be {count} character long.', | ||||
|     qty_must_greater_than_zero: 'Quantity must be greater than zero.', | ||||
|     price_greater_than_zero: 'Price must be greater than zero.', | ||||
|     payment_greater_than_zero: 'Payment must be greater than   zero.', | ||||
|     payment_greater_than_due_amount: 'Entered Payment is more than due amount of this invoice.', | ||||
|     quantity_maxlength: 'Quantity should not be greater than 20 digits.', | ||||
|     price_maxlength: 'Price should not be greater than 20 digits.', | ||||
|     price_minvalue: 'Price should be greater than 0.', | ||||
|     amount_maxlength: 'Amount should not be greater than 20 digits.', | ||||
|     amount_minvalue: 'Amount should be greater than 0.', | ||||
|     description_maxlength: 'Description should not be greater than 255 characters.', | ||||
|     maximum_options_error: 'Maximum  of {max} options selected. First remove a selected option to select another.', | ||||
|     notes_maxlength: 'Notes should not be greater than 255 characters.', | ||||
|     address_maxlength: 'Address should not be greater than 255 characters.', | ||||
|     ref_number_maxlength: 'Ref Number should not be greater than 255 characters.' | ||||
|   } | ||||
| } | ||||
							
								
								
									
										817
									
								
								resources/assets/js/plugins/en.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										817
									
								
								resources/assets/js/plugins/en.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,817 @@ | ||||
| { | ||||
|   "navigation": { | ||||
|     "dashboard": "Dashboard", | ||||
|     "customers": "Customers", | ||||
|     "items": "Items", | ||||
|     "invoices": "Invoices", | ||||
|     "expenses": "Expenses", | ||||
|     "estimates": "Estimates", | ||||
|     "payments": "Payments", | ||||
|     "reports": "Reports", | ||||
|     "settings": "Settings", | ||||
|     "logout": "Logout" | ||||
|   }, | ||||
|   "general": { | ||||
|     "view_pdf": "View PDF", | ||||
|     "download_pdf": "Download PDF", | ||||
|     "save": "Save", | ||||
|     "cancel": "Cancel", | ||||
|     "update": "Update", | ||||
|     "download": "Download", | ||||
|     "from_date": "From Date", | ||||
|     "to_date": "To Date", | ||||
|     "from": "From", | ||||
|     "to": "To", | ||||
|     "go_back": "Go Back", | ||||
|     "back_to_login": "Back to Login?", | ||||
|     "home": "Home", | ||||
|     "filter": "Filter", | ||||
|     "delete": "Delete", | ||||
|     "edit": "Edit", | ||||
|     "view": "View", | ||||
|     "add_new_item": "Add New Item", | ||||
|     "clear_all": "Clear All", | ||||
|     "showing": "Showing", | ||||
|     "of": "of", | ||||
|     "actions": "Actions", | ||||
|     "subtotal": "SUBTOTAL", | ||||
|     "discount": "DISCOUNT", | ||||
|     "fixed": "Fixed", | ||||
|     "percentage": "Percentage", | ||||
|     "tax": "TAX", | ||||
|     "total_amount": "TOTAL AMOUNT", | ||||
|     "bill_to": "Bill to", | ||||
|     "ship_to": "Ship to", | ||||
|     "due": "Due", | ||||
|     "draft": "Draft", | ||||
|     "sent": "Sent", | ||||
|     "all": "All", | ||||
|     "select_all": "Select All", | ||||
|     "choose_file": "Click here to choose a file", | ||||
|     "choose_template": "Choose a template", | ||||
|     "choose": "Choose", | ||||
|     "remove": "Remove", | ||||
|     "powered_by": "Powered by", | ||||
|     "bytefury": "Bytefury", | ||||
|     "select_a_status": "Select a status", | ||||
|     "select_a_tax": "Select a tax", | ||||
|     "search": "Search", | ||||
|     "are_you_sure": "Are you sure?", | ||||
|     "list_is_empty": "List is empty.", | ||||
|     "no_tax_found": "No tax found!", | ||||
|     "four_zero_four": "404", | ||||
|     "you_got_lost": "Whoops! You got Lost!", | ||||
|     "go_home": "Go Home", | ||||
|  | ||||
|     "setting_updated": "Setting updated successfully", | ||||
|     "select_state": "Select state", | ||||
|     "select_country": "Select Country", | ||||
|     "select_city": "Select City", | ||||
|     "street_1": "Street 1", | ||||
|     "street_2": "Street 2", | ||||
|     "action_failed": "Action Failed" | ||||
|   }, | ||||
|   "dashboard": { | ||||
|     "select_year": "Select year", | ||||
|     "cards": { | ||||
|       "due_amount": "Amount Due", | ||||
|       "customers": "Customers", | ||||
|       "invoices": "Invoices", | ||||
|       "estimates": "Estimates" | ||||
|     }, | ||||
|     "chart_info": { | ||||
|       "total_sales": "Sales", | ||||
|       "total_receipts": "Receipts", | ||||
|       "total_expense": "Expenses", | ||||
|       "net_income": "Net Income", | ||||
|       "year": "Select year" | ||||
|     }, | ||||
|     "weekly_invoices": { | ||||
|       "title": "Weekly Invoices" | ||||
|     }, | ||||
|     "monthly_chart": { | ||||
|       "title": "Sales & Expenses" | ||||
|     }, | ||||
|     "recent_invoices_card": { | ||||
|       "title": "Due Invoices", | ||||
|       "due_on": "Due On", | ||||
|       "customer": "Customer", | ||||
|       "amount_due": "Amount Due", | ||||
|       "actions": "Actions", | ||||
|       "view_all": "View All" | ||||
|     }, | ||||
|     "recent_estimate_card": { | ||||
|       "title": "Recent Estimates", | ||||
|       "date": "Date", | ||||
|       "customer": "Customer", | ||||
|       "amount_due": "Amount Due", | ||||
|       "actions": "Actions", | ||||
|       "view_all": "View All" | ||||
|     } | ||||
|   }, | ||||
|   "tax_types": { | ||||
|     "name": "Name", | ||||
|     "description": "Description", | ||||
|     "percent": "Percent", | ||||
|     "compound_tax": "Compound Tax" | ||||
|   }, | ||||
|   "customers": { | ||||
|     "title": "Customers", | ||||
|     "add_customer": "Add Customer", | ||||
|     "contacts_list": "Customer List", | ||||
|     "name": "Name", | ||||
|     "display_name": "Display Name", | ||||
|     "primary_contact_name": "Primary Contact Name", | ||||
|     "contact_name": "Contact Name", | ||||
|     "amount_due": "Amount Due", | ||||
|     "email": "Email", | ||||
|     "address": "Address", | ||||
|     "phone": "Phone", | ||||
|     "website": "Website", | ||||
|     "country": "Country", | ||||
|     "state": "State", | ||||
|     "city": "City", | ||||
|     "zip_code": "Zip Code", | ||||
|     "added_on": "Added On", | ||||
|     "action": "Action", | ||||
|     "password": "Password", | ||||
|     "street_number": "Street Number", | ||||
|     "primary_currency": "Primary Currency", | ||||
|     "add_new_customer": "Add New Customer", | ||||
|     "save_customer": "Save Customer", | ||||
|     "update_customer": "Update Customer", | ||||
|     "customer": "Customer | Customers", | ||||
|     "new_customer": "New Customer", | ||||
|     "edit_customer": "Edit Customer", | ||||
|     "basic_info": "Basic Info", | ||||
|     "billing_address": "Billing Address", | ||||
|     "shipping_address": "Shipping Address", | ||||
|     "copy_billing_address": "Copy from Billing", | ||||
|     "no_customers": "No customers yet!", | ||||
|     "no_customers_found": "No customers found!", | ||||
|     "list_of_customers": "This section will contain the list of customers.", | ||||
|     "primary_display_name": "Primary Display Name", | ||||
|     "select_currency": "Select currency", | ||||
|     "select_a_customer": "Select a customer", | ||||
|     "type_or_click": "Type or click to select", | ||||
|  | ||||
|     "confirm_delete": "You will not be able to recover this Customer | You will not be able to recover these Customers", | ||||
|     "created_message": "Customer created successfully", | ||||
|     "updated_message": "Customer updated successfully", | ||||
|     "deleted_message": "Customer deleted successfully | Customers deleted successfully" | ||||
|   }, | ||||
|   "items": { | ||||
|     "title": "Items", | ||||
|     "items_list": "Items List", | ||||
|     "name": "Name", | ||||
|     "unit": "Unit", | ||||
|     "description": "Description", | ||||
|     "added_on": "Added On", | ||||
|     "price": "Price", | ||||
|     "date_of_creation": "Date Of Creation", | ||||
|     "action": "Action", | ||||
|     "add_item": "Add Item", | ||||
|     "save_item": "Save Item", | ||||
|     "update_item": "Update Item", | ||||
|     "item": "Item | Items", | ||||
|     "add_new_item": "Add New Item", | ||||
|     "new_item": "New Item", | ||||
|     "edit_item": "Edit Item", | ||||
|     "no_items": "No items yet!", | ||||
|     "list_of_items": "This section will contain the list of items.", | ||||
|     "select_a_unit": "select unit", | ||||
|  | ||||
|     "item_attached_message": "Cannot delete an item which is already in use", | ||||
|     "confirm_delete": "You will not be able to recover this Item | You will not be able to recover these Items", | ||||
|     "created_message": "Item created successfully", | ||||
|     "updated_message": "Item updated successfully", | ||||
|     "deleted_message": "Item deleted successfully | Items deleted successfully" | ||||
|   }, | ||||
|   "estimates": { | ||||
|     "title": "Estimates", | ||||
|     "estimate": "Estimate | Estimates", | ||||
|     "estimates_list": "Estimates List", | ||||
|     "days": "{days} Days", | ||||
|     "months": "{months} Month", | ||||
|     "years": "{years} Year", | ||||
|     "all": "All", | ||||
|     "paid": "Paid", | ||||
|     "unpaid": "Unpaid", | ||||
|     "customer": "CUSTOMER", | ||||
|     "ref_no": "REF NO.", | ||||
|     "number": "NUMBER", | ||||
|     "amount_due": "AMOUNT DUE", | ||||
|     "partially_paid": "Partially Paid", | ||||
|     "total": "Total", | ||||
|     "discount": "Discount", | ||||
|     "sub_total": "Sub Total", | ||||
|     "estimate_number": "Estimate Number", | ||||
|     "ref_number": "Ref Number", | ||||
|     "contact": "Contact", | ||||
|     "add_item": "Add an Item", | ||||
|     "date": "Date", | ||||
|     "due_date": "Due Date", | ||||
|     "expiry_date": "Expiry Date", | ||||
|     "status": "Status", | ||||
|     "add_tax": "Add Tax", | ||||
|     "amount": "Amount", | ||||
|     "action": "Action", | ||||
|     "notes": "Notes", | ||||
|     "tax": "Tax", | ||||
|     "estimate_template": "Template", | ||||
|     "convert_to_invoice": "Convert to Invoice", | ||||
|     "mark_as_sent": "Mark as Sent", | ||||
|     "send_estimate": "Send Estimate", | ||||
|     "record_payment": "Record Payment", | ||||
|     "add_estimate": "Add Estimate", | ||||
|     "save_estimate": "Save Estimate", | ||||
|     "confirm_conversion": "You want to convert this Estimate into Invoice?", | ||||
|     "conversion_message": "Invoice created successful", | ||||
|     "confirm_send_estimate": "This estimate will be sent via email to the customer", | ||||
|     "confirm_mark_as_sent": "This estimate will be marked as sent", | ||||
|     "confirm_mark_as_accepted": "This estimate will be marked as Accepted", | ||||
|     "confirm_mark_as_rejected": "This estimate will be marked as Rejected", | ||||
|     "no_matching_estimates": "There are no matching estimates!", | ||||
|     "mark_as_sent_successfully": "Estimate marked as sent successfully", | ||||
|     "send_estimate_successfully": "Estimate sent successfully", | ||||
|     "errors": { | ||||
|       "required": "Field is required" | ||||
|     }, | ||||
|     "accepted": "Accepted", | ||||
|     "sent": "Sent", | ||||
|     "draft": "Draft", | ||||
|     "declined": "Declined", | ||||
|     "new_estimate": "New Estimate", | ||||
|     "add_new_estimate": "Add New Estimate", | ||||
|     "update_Estimate": "Update Estimate", | ||||
|     "edit_estimate": "Edit Estimate", | ||||
|     "items": "items", | ||||
|     "Estimate": "Estimate | Estimates", | ||||
|     "add_new_tax": "Add New Tax", | ||||
|     "no_estimates": "No estimates yet!", | ||||
|     "list_of_estimates": "This section will contain the list of estimates.", | ||||
|     "mark_as_rejected": "Mark as rejected", | ||||
|     "mark_as_accepted": "Mark as accepted", | ||||
|  | ||||
|     "marked_as_accepted_message": "Estimate marked as accepted", | ||||
|     "marked_as_rejected_message": "Estimate marked as rejected", | ||||
|     "confirm_delete": "You will not be able to recover this Estimate | You will not be able to recover these Estimates", | ||||
|     "created_message": "Estimate created successfully", | ||||
|     "updated_message": "Estimate updated successfully", | ||||
|     "deleted_message": "Estimate deleted successfully | Estimates deleted successfully", | ||||
|     "user_email_does_not_exist": "User email does not exist", | ||||
|     "something_went_wrong": "something went wrong", | ||||
|     "item": { | ||||
|       "title": "Item Title", | ||||
|       "description": "Description", | ||||
|       "quantity": "Quantity", | ||||
|       "price": "Price", | ||||
|       "discount": "Discount", | ||||
|       "total": "Total", | ||||
|       "total_discount": "Total Discount", | ||||
|       "sub_total": "Sub Total", | ||||
|       "tax": "Tax", | ||||
|       "amount": "Amount", | ||||
|       "select_an_item": "Type or click to select an item", | ||||
|       "type_item_description": "Type Item Description (optional)" | ||||
|     } | ||||
|   }, | ||||
|   "invoices": { | ||||
|     "title": "Invoices", | ||||
|     "invoices_list": "Invoices List", | ||||
|     "days": "{days} Days", | ||||
|     "months": "{months} Month", | ||||
|     "years": "{years} Year", | ||||
|     "all": "All", | ||||
|     "paid": "Paid", | ||||
|     "unpaid": "Unpaid", | ||||
|     "customer": "CUSTOMER", | ||||
|     "paid_status": "PAID STATUS", | ||||
|     "ref_no": "REF NO.", | ||||
|     "number": "NUMBER", | ||||
|     "amount_due": "AMOUNT DUE", | ||||
|     "partially_paid": "Partially Paid", | ||||
|     "total": "Total", | ||||
|     "discount": "Discount", | ||||
|     "sub_total": "Sub Total", | ||||
|     "invoice": "Invoice | Invoices", | ||||
|     "invoice_number": "Invoice Number", | ||||
|     "ref_number": "Ref Number", | ||||
|     "contact": "Contact", | ||||
|     "add_item": "Add an Item", | ||||
|     "date": "Date", | ||||
|     "due_date": "Due Date", | ||||
|     "status": "Status", | ||||
|     "add_tax": "Add Tax", | ||||
|     "amount": "Amount", | ||||
|     "action": "Action", | ||||
|     "notes": "Notes", | ||||
|     "view": "View", | ||||
|     "send_invoice": "Send Invoice", | ||||
|     "invoice_template": "Invoice Template", | ||||
|     "template": "Template", | ||||
|     "mark_as_sent": "Mark as sent", | ||||
|     "confirm_send_invoice": "This invoice will be sent via email to the customer", | ||||
|     "invoice_mark_as_sent": "This invoice will be marked as sent", | ||||
|     "confirm_send": "This invoice will be sent via email to the customer", | ||||
|     "invoice_date": "Invoice Date", | ||||
|     "record_payment": "Record Payment", | ||||
|     "add_new_invoice": "Add New Invoice", | ||||
|     "update_expense": "Update Expense", | ||||
|     "edit_invoice": "Edit Invoice", | ||||
|     "new_invoice": "New Invoice", | ||||
|     "save_invoice": "Save Invoice", | ||||
|     "update_invoice": "Update Invoice", | ||||
|     "add_new_tax": "Add New Tax", | ||||
|     "no_invoices": "No Invoices yet!", | ||||
|     "list_of_invoices": "This section will contain the list of invoices.", | ||||
|     "select_invoice": "Select Invoice", | ||||
|     "no_matching_invoices": "There are no matching invoices!", | ||||
|     "mark_as_sent_successfully": "Invoice marked as sent successfully", | ||||
|     "send_invoice_successfully": "Invoice sent successfully", | ||||
|     "item": { | ||||
|       "title": "Item Title", | ||||
|       "description": "Description", | ||||
|       "quantity": "Quantity", | ||||
|       "price": "Price", | ||||
|       "discount": "Discount", | ||||
|       "total": "Total", | ||||
|       "total_discount": "Total Discount", | ||||
|       "sub_total": "Sub Total", | ||||
|       "tax": "Tax", | ||||
|       "amount": "Amount", | ||||
|       "select_an_item": "Type or click to select an item", | ||||
|       "type_item_description": "Type Item Description (optional)" | ||||
|     }, | ||||
|  | ||||
|     "payment_attached_message": "One of the selected invoices already have a payment attached to it. Make sure to delete the attached payments first in order to go ahead with the removal", | ||||
|     "confirm_delete": "You will not be able to recover this Invoice | You will not be able to recover these Invoices", | ||||
|     "created_message": "Invoice created successfully", | ||||
|     "updated_message": "Invoice updated successfully", | ||||
|     "deleted_message": "Invoice deleted successfully | Invoices deleted successfully", | ||||
|     "marked_as_sent_message": "Invoice marked as sent successfully", | ||||
|     "user_email_does_not_exist": "User email does not exist", | ||||
|     "something_went_wrong": "something went wrong", | ||||
|     "invalid_due_amount_message": "Total Invoice amount cannot be less than total paid amount for this Invoice. Please update the invoice or delete the associated payments to continue." | ||||
|   }, | ||||
|   "credit_notes": { | ||||
|     "title": "Credit Notes", | ||||
|     "credit_notes_list": "Credit Notes List", | ||||
|     "credit_notes": "Credit Notes", | ||||
|     "contact": "Contact", | ||||
|     "date": "Date", | ||||
|     "amount": "Amount", | ||||
|     "action": "Action", | ||||
|     "credit_number": "Credit Number", | ||||
|     "notes": "Notes", | ||||
|     "confirm_delete": "Do you want to delete this credit note?", | ||||
|     "item": { | ||||
|       "title": "Item Title", | ||||
|       "description": "Description", | ||||
|       "quantity": "Quantity", | ||||
|       "price": "Price", | ||||
|       "discount": "Discount", | ||||
|       "total": "Total", | ||||
|       "total_discount": "Total Discount", | ||||
|       "sub_total": "Sub Total", | ||||
|       "tax": "Tax" | ||||
|     } | ||||
|   }, | ||||
|   "payments": { | ||||
|     "title": "Payments", | ||||
|     "payments_list": "Payments List", | ||||
|     "record_payment": "Record Payment", | ||||
|     "customer": "Customer", | ||||
|     "date": "Date", | ||||
|     "amount": "Amount", | ||||
|     "action": "Action", | ||||
|     "payment_number": "Payment Number", | ||||
|     "payment_mode": "Payment Mode", | ||||
|     "invoice": "Invoice", | ||||
|     "note": "Note", | ||||
|     "add_payment": "Add Payment", | ||||
|     "new_payment": "New Payment", | ||||
|     "edit_payment": "Edit Payment", | ||||
|     "view_payment": "View Payment", | ||||
|     "add_new_payment": "Add New Payment", | ||||
|     "save_payment": "Save Payment", | ||||
|     "update_payment": "Update Payment", | ||||
|     "payment": "Payment | Payments", | ||||
|     "no_payments": "No payments yet!", | ||||
|     "list_of_payments": "This section will contain the list of payments.", | ||||
|     "select_payment_mode": "Select payment mode", | ||||
|  | ||||
|     "confirm_delete": "You will not be able to recover this Payment | You will not be able to recover these Payments", | ||||
|     "created_message": "Payment created successfully", | ||||
|     "updated_message": "Payment updated successfully", | ||||
|     "deleted_message": "Payment deleted successfully | Payments deleted successfully", | ||||
|     "invalid_amount_message": "Payment amount is invalid" | ||||
|   }, | ||||
|   "expenses": { | ||||
|     "title": "Expenses", | ||||
|     "expenses_list": "Expenses List", | ||||
|     "expense_title": "Title", | ||||
|     "contact": "Contact", | ||||
|     "category": "Category", | ||||
|     "from_date": "From Date", | ||||
|     "to_date": "To Date", | ||||
|     "expense_date": "Date", | ||||
|     "description": "Description", | ||||
|     "receipt": "Receipt", | ||||
|     "amount": "Amount", | ||||
|     "action": "Action", | ||||
|     "note": "Note", | ||||
|     "category_id": "Category Id", | ||||
|     "date": "Expense Date", | ||||
|     "add_expense": "Add Expense", | ||||
|     "add_new_expense": "Add New Expense", | ||||
|     "save_expense": "Save Expense", | ||||
|     "update_expense": "Update Expense", | ||||
|     "download_receipt": "Download Receipt", | ||||
|     "edit_expense": "Edit Expense", | ||||
|     "new_expense": "New Expense", | ||||
|     "expense": "Expense | Expenses", | ||||
|     "no_expenses": "No expenses yet!", | ||||
|     "list_of_expenses": "This section will contain the list of expenses.", | ||||
|  | ||||
|     "confirm_delete": "You will not be able to recover this Expense | You will not be able to recover these Expenses", | ||||
|     "created_message": "Expense created successfully", | ||||
|     "updated_message": "Expense updated successfully", | ||||
|     "deleted_message": "Expense deleted successfully | Expenses deleted successfully", | ||||
|     "categories": { | ||||
|       "categories_list": "Categories List", | ||||
|       "title": "Title", | ||||
|       "name": "Name", | ||||
|       "description": "Description", | ||||
|       "amount": "Amount", | ||||
|       "actions": "Actions", | ||||
|       "add_category": "Add Category", | ||||
|       "new_category": "New Category", | ||||
|       "category": "Category | Categories", | ||||
|       "select_a_category": "Select a category" | ||||
|     } | ||||
|   }, | ||||
|   "login": { | ||||
|     "email": "Email", | ||||
|     "password": "Password", | ||||
|     "forgot_password": "Forgot Password?", | ||||
|     "or_signIn_with": "or Sign in with", | ||||
|     "login": "Login", | ||||
|     "register": "Register", | ||||
|     "reset_password": "Reset Password", | ||||
|     "password_reset_successfully": "Password Reset Successfully", | ||||
|     "enter_email": "Enter email", | ||||
|     "enter_password": "Enter Password", | ||||
|     "retype_password": "Retype Password", | ||||
|     "login_placeholder": "mail@example.com" | ||||
|   }, | ||||
|   "reports": { | ||||
|     "title": "Report", | ||||
|     "from_date": "From Date", | ||||
|     "to_date": "To Date", | ||||
|     "status": "Status", | ||||
|     "paid": "Paid", | ||||
|     "unpaid": "Unpaid", | ||||
|     "download_pdf": "Download PDF", | ||||
|     "view_pdf": "View PDF", | ||||
|     "update_report": "Update Report", | ||||
|     "report": "Report | Reports", | ||||
|     "profit_loss": { | ||||
|       "profit_loss": "Profit & Loss", | ||||
|       "to_date": "To Date", | ||||
|       "from_date": "From Date", | ||||
|       "date_range": "Select Date Range" | ||||
|     }, | ||||
|     "sales": { | ||||
|       "sales": "Sales", | ||||
|       "date_range": "Select Date Range", | ||||
|       "to_date": "To Date", | ||||
|       "from_date": "From Date", | ||||
|       "report_type": "Report Type" | ||||
|     }, | ||||
|     "taxes": { | ||||
|       "taxes": "Taxes", | ||||
|       "to_date": "To Date", | ||||
|       "from_date": "From Date", | ||||
|       "date_range": "Select Date Range" | ||||
|     }, | ||||
|     "errors": { | ||||
|       "required": "Field is required" | ||||
|     }, | ||||
|     "invoices": { | ||||
|       "invoice": "Invoice", | ||||
|       "invoice_date": "Invoice Date", | ||||
|       "due_date": "Due Date", | ||||
|       "amount": "Amount", | ||||
|       "contact_name": "Contact Name", | ||||
|       "status": "Status" | ||||
|     }, | ||||
|     "estimates": { | ||||
|       "estimate": "Estimate", | ||||
|       "estimate_date": "Estimate Date", | ||||
|       "due_date": "Due Date", | ||||
|       "estimate_number": "Estimate Number", | ||||
|       "ref_number": "Ref Number", | ||||
|       "amount": "Amount", | ||||
|       "contact_name": "Contact Name", | ||||
|       "status": "Status" | ||||
|     }, | ||||
|     "expenses": { | ||||
|       "expenses": "Expenses", | ||||
|       "category": "Category", | ||||
|       "date": "Date", | ||||
|       "amount": "Amount", | ||||
|       "to_date": "To Date", | ||||
|       "from_date": "From Date", | ||||
|       "date_range": "Select Date Range" | ||||
|     } | ||||
|   }, | ||||
|   "settings": { | ||||
|     "menu_title": { | ||||
|       "account_settings": "Account Settings", | ||||
|       "company_information": "Company Information", | ||||
|       "preferences": "Preferences", | ||||
|       "notifications": "Notifications", | ||||
|       "tax_types": "Tax Types", | ||||
|       "expense_category": "Expense Categories", | ||||
|       "update_app": "Update App" | ||||
|     }, | ||||
|     "title": "Settings", | ||||
|     "setting": "Settings | Settings", | ||||
|     "general": "General", | ||||
|     "language": "Language", | ||||
|     "primary_currency": "Primary Currency", | ||||
|     "timezone": "Time Zone", | ||||
|     "date_format": "Date Format", | ||||
|     "currencies": { | ||||
|       "title": "Currencies", | ||||
|       "currency": "Currency | Currencies", | ||||
|       "currencies_list": "Currencies List", | ||||
|       "select_currency": "Select Currency", | ||||
|       "name": "Name", | ||||
|       "code": "Code", | ||||
|       "symbol": "Symbol", | ||||
|       "precision": "Precision", | ||||
|       "thousand_separator": "Thousand Separator", | ||||
|       "decimal_separator": "Decimal Separator", | ||||
|       "position": "Position", | ||||
|       "position_of_symbol": "Position Of Symbol", | ||||
|       "right": "Right", | ||||
|       "left": "Left", | ||||
|       "action": "Action", | ||||
|       "add_currency": "Add Currency" | ||||
|     }, | ||||
|     "mail": { | ||||
|       "host": "Mail Host", | ||||
|       "port": "Mail Port", | ||||
|       "driver": "Mail Driver", | ||||
|       "secret": "Secret", | ||||
|       "mailgun_secret": "Mailgun Secret", | ||||
|       "mailgun_domain": "Domain", | ||||
|       "mailgun_endpoint": "Mailgun Endpoint", | ||||
|       "ses_secret": "SES Secret", | ||||
|       "ses_key": "SES Key", | ||||
|       "password": "Mail Password", | ||||
|       "username": "Mail Username", | ||||
|       "mail_config": "Mail Configuration", | ||||
|       "from_name": "From Mail Name", | ||||
|       "from_mail": "From Mail Address", | ||||
|       "encryption": "Mail Encryption", | ||||
|       "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc." | ||||
|     }, | ||||
|     "pdf": { | ||||
|       "title": "PDF Setting", | ||||
|       "footer_text": "Footer Text", | ||||
|       "pdf_layout": "PDF Layout" | ||||
|     }, | ||||
|     "company_info": { | ||||
|       "company_info": "Company info", | ||||
|       "company_name": "Company Name", | ||||
|       "company_logo": "Company Logo", | ||||
|       "section_description": "Information about your company that will be displayed on invoices, estimates and other documents created by Crater.", | ||||
|       "phone": "Phone", | ||||
|       "country": "Country", | ||||
|       "state": "State", | ||||
|       "city": "City", | ||||
|       "address": "Address", | ||||
|       "zip": "Zip", | ||||
|       "save": "Save", | ||||
|       "updated_message": "Company information updated successfully" | ||||
|     }, | ||||
|     "account_settings": { | ||||
|       "profile_picture": "Profile Picture", | ||||
|       "name": "Name", | ||||
|       "email": "Email", | ||||
|       "password": "Password", | ||||
|       "confirm_password": "Confirm Password", | ||||
|       "account_settings": "Account Settings", | ||||
|       "save": "Save", | ||||
|       "section_description": "You can update your name, email & password using the form below.", | ||||
|       "updated_message": "Account Settings updated successfully" | ||||
|     }, | ||||
|     "user_profile": { | ||||
|       "name": "Name", | ||||
|       "email": "Email", | ||||
|       "password": "Password", | ||||
|       "confirm_password": "Confirm Password" | ||||
|     }, | ||||
|     "notification": { | ||||
|       "title": "Notification", | ||||
|       "email": "Send Notifications to", | ||||
|       "description": "Which email notifications would you like to receive when something changes?", | ||||
|       "invoice_viewed": "Invoice viewed", | ||||
|       "invoice_viewed_desc": "When your customer views the invoice sent via crater dashboard.", | ||||
|       "estimate_viewed": "Estimate viewed", | ||||
|       "estimate_viewed_desc": "When your customer views the estimate sent via crater dashboard.", | ||||
|       "save": "Save", | ||||
|       "email_save_message": "Email saved successfully", | ||||
|       "please_enter_email": "Please Enter Email" | ||||
|     }, | ||||
|     "tax_types": { | ||||
|       "title": "Tax Types", | ||||
|       "add_tax": "Add Tax", | ||||
|       "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", | ||||
|       "tax_settings": "Tax Settings", | ||||
|       "tax_per_item": "Tax Per Item", | ||||
|       "tax_name": "Tax Name", | ||||
|       "compound_tax": "Compound Tax", | ||||
|       "percent": "Percent", | ||||
|       "action": "Action", | ||||
|       "tax_setting_description": "Enable this if you want to add taxes to individual invoice items. By default, taxes are added directly to the invoice.", | ||||
|       "created_message": "Tax type created successfully", | ||||
|       "updated_message": "Tax type updated successfully", | ||||
|       "deleted_message": "Tax type deleted successfully", | ||||
|       "confirm_delete": "You will not be able to recover this Tax Type", | ||||
|       "already_in_use": "Tax is already in use" | ||||
|     }, | ||||
|     "expense_category": { | ||||
|       "title": "Expense Categories", | ||||
|       "action": "Action", | ||||
|       "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", | ||||
|       "category_name": "Category Name", | ||||
|       "category_description": "Description", | ||||
|       "created_message": "Expense Category created successfully", | ||||
|       "deleted_message": "Expense category deleted successfully", | ||||
|       "updated_message": "Expense category updated successfully", | ||||
|       "confirm_delete": "You will not be able to recover this Expense Category", | ||||
|       "already_in_use": "Category is already in use" | ||||
|     }, | ||||
|     "preferences": { | ||||
|       "currency": "Currency", | ||||
|       "language": "Language", | ||||
|       "time_zone": "Time Zone", | ||||
|       "fiscal_year": "Financial Year", | ||||
|       "date_format": "Date Format", | ||||
|       "discount_setting": "Discount Setting", | ||||
|       "discount_per_item": "Discount Per Item ", | ||||
|       "discount_setting_description": "Enable this if you want to add Discount to individual invoice items. By default, Discount are added directly to the invoice.", | ||||
|       "save": "Save", | ||||
|       "preference": "Preference | Preferences", | ||||
|       "general_settings": "Default preferences for the system.", | ||||
|       "updated_message": "Preferences updated successfully", | ||||
|       "select_language": "select language", | ||||
|       "select_time_zone": "select Time Zone", | ||||
|       "select_date_formate": "select Date Formate", | ||||
|       "select_financial_year": "select financial year" | ||||
|     }, | ||||
|     "update_app": { | ||||
|       "title": "Update App", | ||||
|       "description": "You can easily update Crater by checking for a new update by clicking the button below", | ||||
|       "check_update": "Check for updates", | ||||
|       "avail_update": "New Update available", | ||||
|       "next_version": "Next version", | ||||
|       "update": "Update Now", | ||||
|       "update_progress": "Update in progress...", | ||||
|       "progress_text": "It will just take a few minutes. Please do not refresh the screen or close the window before the update finishes", | ||||
|       "update_success": "App has been updated! Please wait while your browser window gets reloaded automatically.", | ||||
|       "latest_message": "No update available! You are on the latest version.", | ||||
|       "current_version": "Current Version" | ||||
|     } | ||||
|   }, | ||||
|   "wizard": { | ||||
|     "account_info": "Account Information", | ||||
|     "account_info_desc": "Below details will be used to create the main Administrator account. Also you can change the details anytime after logging in.", | ||||
|     "name": "Name", | ||||
|     "email": "Email", | ||||
|     "password": "Password", | ||||
|     "confirm_password": "Confirm Password", | ||||
|     "save_cont": "Save & Continue", | ||||
|     "company_info": "Company Information", | ||||
|     "company_info_desc": "This information will be displayed on invoices. Note that you can edit this later on settings page.", | ||||
|     "company_name": "Company Name", | ||||
|     "company_logo": "Company Logo", | ||||
|     "logo_preview": "Logo Preview", | ||||
|     "preferences": "Preferences", | ||||
|     "preferences_desc": "Default preferences for the system.", | ||||
|     "country": "Country", | ||||
|     "state": "State", | ||||
|     "city": "City", | ||||
|     "address": "Address", | ||||
|     "street": "Street1 | Street2", | ||||
|     "phone": "Phone", | ||||
|     "zip_code": "Zip Code", | ||||
|     "go_back": "Go Back", | ||||
|     "currency": "Currency", | ||||
|     "language": "Language", | ||||
|     "time_zone": "Time Zone", | ||||
|     "fiscal_year": "Financial Year", | ||||
|     "date_format": "Date Format", | ||||
|     "from_address": "From Address", | ||||
|     "username": "Username", | ||||
|     "next": "Next", | ||||
|     "continue": "Continue", | ||||
|     "skip": "Skip", | ||||
|     "database": { | ||||
|       "database": "Site URL & Database", | ||||
|       "connection": "Database Connection", | ||||
|       "host": "Database Host", | ||||
|       "port": "Database Port", | ||||
|       "password": "Database Password", | ||||
|       "app_url": "App URL", | ||||
|       "username": "Database Username", | ||||
|       "db_name": "Database Name", | ||||
|       "desc": "Create a database on your server and set the credentials using the form below." | ||||
|     }, | ||||
|     "permissions": { | ||||
|       "permissions": "Permissions", | ||||
|       "permission_confirm_title": "Are you sure you want to continue?", | ||||
|       "permission_confirm_desc": "Folder permission check failed", | ||||
|       "permission_desc": "Below is the list of folder permissions which are required in order for the app to work. If the permission check fails, make sure to update your folder permissions." | ||||
|     }, | ||||
|     "mail": { | ||||
|       "host": "Mail Host", | ||||
|       "port": "Mail Port", | ||||
|       "driver": "Mail Driver", | ||||
|       "secret": "Secret", | ||||
|       "mailgun_secret": "Mailgun Secret", | ||||
|       "mailgun_domain": "Domain", | ||||
|       "mailgun_endpoint": "Mailgun Endpoint", | ||||
|       "ses_secret": "SES Secret", | ||||
|       "ses_key": "SES Key", | ||||
|       "password": "Mail Password", | ||||
|       "username": "Mail Username", | ||||
|       "mail_config": "Mail Configuration", | ||||
|       "from_name": "From Mail Name", | ||||
|       "from_mail": "From Mail Address", | ||||
|       "encryption": "Mail Encryption", | ||||
|       "mail_config_desc": "Below is the form for Configuring Email driver for sending emails from the app. You can also configure third party providers like Sendgrid, SES etc." | ||||
|     }, | ||||
|     "req": { | ||||
|       "system_req": "System Requirements", | ||||
|       "php_req_version": "Php (version {version} required)", | ||||
|       "check_req": "Check Requirements", | ||||
|       "system_req_desc": "Crater has a few server requirements. Make sure that your server has the required php version and all the extensions mentioned below." | ||||
|     }, | ||||
|     "errors": { | ||||
|       "migrate_failed": "Migrate Failed", | ||||
|       "database_variables_save_error": "Unable to connect to the DB with Provided Values.", | ||||
|       "mail_variables_save_error": "Email configuration failed.", | ||||
|       "connection_failed": "Database connection failed", | ||||
|       "database_should_be_empty": "Database should be empty" | ||||
|     }, | ||||
|     "success": { | ||||
|       "mail_variables_save_successfully": "Email configured successfully", | ||||
|       "database_variables_save_successfully": "Database configured successfully." | ||||
|     } | ||||
|   }, | ||||
|   "layout_login": { | ||||
|     "copyright_crater": "Copyright @ Crater - 2019", | ||||
|     "super_simple_invoicing": "Super Simple Invoicing", | ||||
|     "for_freelancer": "for Freelancers &", | ||||
|     "small_businesses": "Small Businesses ", | ||||
|     "crater_help": "Crater helps you track expenses, record payments & generate beautiful", | ||||
|     "invoices_and_estimates": "invoices & estimates with ability to choose multiple templates." | ||||
|   }, | ||||
|   "validation": { | ||||
|     "invalid_url": "Invalid url (ex: http://www.crater.com)", | ||||
|     "required": "Field is required", | ||||
|     "email_incorrect": "Incorrect Email.", | ||||
|     "email_already_taken": "The email has already been taken.", | ||||
|     "email_does_not_exist": "User with given email doesn't exist", | ||||
|     "send_reset_link": "Send Reset Link", | ||||
|     "not_yet": "Not yet? Send it again", | ||||
|     "password_min_length": "Password must contain {count} characters", | ||||
|     "name_min_length": "Name must have at least {count} letters.", | ||||
|     "enter_valid_tax_rate": "Enter valid tax rate", | ||||
|     "numbers_only": "Numbers Only.", | ||||
|     "characters_only": "Characters Only.", | ||||
|     "password_incorrect": "Passwords must be identical", | ||||
|     "password_length": "Password must be {count} character long.", | ||||
|     "qty_must_greater_than_zero": "Quantity must be greater than zero.", | ||||
|     "price_greater_than_zero": "Price must be greater than zero.", | ||||
|     "payment_greater_than_zero": "Payment must be greater than   zero.", | ||||
|     "payment_greater_than_due_amount": "Entered Payment is more than due amount of this invoice.", | ||||
|     "quantity_maxlength": "Quantity should not be greater than 20 digits.", | ||||
|     "price_maxlength": "Price should not be greater than 20 digits.", | ||||
|     "price_minvalue": "Price should be greater than 0.", | ||||
|     "amount_maxlength": "Amount should not be greater than 20 digits.", | ||||
|     "amount_minvalue": "Amount should be greater than 0.", | ||||
|     "description_maxlength": "Description should not be greater than 255 characters.", | ||||
|     "maximum_options_error": "Maximum  of {max} options selected. First remove a selected option to select another.", | ||||
|     "notes_maxlength": "Notes should not be greater than 255 characters.", | ||||
|     "address_maxlength": "Address should not be greater than 255 characters.", | ||||
|     "ref_number_maxlength": "Ref Number should not be greater than 255 characters." | ||||
|   } | ||||
| } | ||||
| @ -1,812 +0,0 @@ | ||||
| export default { | ||||
|   navigation: { | ||||
|     // key : 'singular | plural' | ||||
|     dashboard: 'Tablero', | ||||
|     customers: 'Clientes', | ||||
|     items: 'Artículos', | ||||
|     invoices: 'Facturas', | ||||
|     expenses: 'Gastos', | ||||
|     estimates: 'Estimadas', | ||||
|     payments: 'Pagos', | ||||
|     reports: 'Informes', | ||||
|     settings: 'Configuraciones', | ||||
|     logout: 'Cerrar sesión' | ||||
|   }, | ||||
|   general: { | ||||
|     view_pdf: 'Ver PDF', | ||||
|     download_pdf: 'Descargar PDF', | ||||
|     save: 'Salvar', | ||||
|     cancel: 'Cancelar', | ||||
|     update: 'Actualizar', | ||||
|     download: 'Descargar', | ||||
|     from_date: 'Partir de la fecha', | ||||
|     to_date: 'Hasta la fecha', | ||||
|     from: 'De', | ||||
|     to: 'A', | ||||
|     go_back: 'Regresa', | ||||
|     back_to_login: '¿Atrás para iniciar sesión?', | ||||
|     home: 'Casa', | ||||
|     filter: 'Filtrar', | ||||
|     delete: 'Eliminar', | ||||
|     edit: 'Editar', | ||||
|     view: 'Ver', | ||||
|     add_new_item: 'Agregar ítem nuevo', | ||||
|     clear_all: 'Limpiar todo', | ||||
|     showing: 'Demostración', | ||||
|     of: 'de', | ||||
|     actions: 'Comportamiento', | ||||
|     subtotal: 'TOTAL PARCIAL', | ||||
|     discount: 'DESCUENTO', | ||||
|     fixed: 'Fija', | ||||
|     percentage: 'Porcentaje', | ||||
|     tax: 'IMPUESTO', | ||||
|     total_amount: 'CANTIDAD TOTAL', | ||||
|     bill_to: 'Cobrar a', | ||||
|     ship_to: 'Envie a', | ||||
|     due: 'Debida', | ||||
|     draft: 'Sequía', | ||||
|     sent: 'Expedida', | ||||
|     all: 'Todas', | ||||
|     select_all: 'Seleccionar todo', | ||||
|     choose_file: 'Haga clic aquí para elegir un archivo.', | ||||
|     choose_template: 'Elige una plantilla', | ||||
|     choose: 'Escoger', | ||||
|     remove: 'Eliminar', | ||||
|     powered_by: 'Energizado por', | ||||
|     bytefury: 'Bytefury', | ||||
|     select_a_status: 'Selecciona un estado', | ||||
|     select_a_tax: 'Selecciona un impuesto', | ||||
|     search: 'Buscar', | ||||
|     are_you_sure: '¿Estás seguro?', | ||||
|     list_is_empty: 'La lista esta vacía.', | ||||
|     no_tax_found: '¡No se encontraron impuestos!', | ||||
|     four_zero_four: '404', | ||||
|     you_got_lost: 'Whoops! ¡Te perdiste!', | ||||
|     go_home: 'Vete a casa', | ||||
|  | ||||
|     setting_updated: 'Configuración actualizada con éxito', | ||||
|     select_state: 'Seleccione estado', | ||||
|     select_country: 'Seleccionar país', | ||||
|     select_city: 'Ciudad selecta', | ||||
|     street_1: 'Calle 1', | ||||
|     street_2: 'Calle # 2', | ||||
|     action_failed: 'Accion: Fallida' | ||||
|   }, | ||||
|   dashboard: { | ||||
|     select_year: 'Seleccione año', | ||||
|     cards: { | ||||
|       due_amount: 'Monto adeudado', | ||||
|       customers: 'Clientes', | ||||
|       invoices: 'Facturas', | ||||
|       estimates: 'Estimadas' | ||||
|     }, | ||||
|     chart_info: { | ||||
|       total_sales: 'Ventas', | ||||
|       total_receipts: 'Ingresos', | ||||
|       total_expense: 'Gastos', | ||||
|       net_income: 'Lngresos netos', | ||||
|       year: 'Seleccione año' | ||||
|     }, | ||||
|     weekly_invoices: { | ||||
|       title: 'Facturas semanales' | ||||
|     }, | ||||
|     monthly_chart: { | ||||
|       title: 'Gastos de venta' | ||||
|     }, | ||||
|     recent_invoices_card: { | ||||
|       title: 'Facturas adeudadas', | ||||
|       due_on: 'Debido a', | ||||
|       customer: 'Cliente', | ||||
|       amount_due: 'Monto adeudado', | ||||
|       actions: 'Comportamiento', | ||||
|       view_all: 'Ver todo' | ||||
|     }, | ||||
|     recent_estimate_card: { | ||||
|       title: 'Estimaciones recientes', | ||||
|       date: 'Fecha', | ||||
|       customer: 'Cliente', | ||||
|       amount_due: 'Monto adeudado', | ||||
|       actions: 'Comportamiento', | ||||
|       view_all: 'Ver todo' | ||||
|     } | ||||
|   }, | ||||
|   tax_types: { | ||||
|     name: 'Nombre', | ||||
|     description: 'Descripción', | ||||
|     percent: 'Por ciento', | ||||
|     compound_tax: 'Impuesto compuesto' | ||||
|   }, | ||||
|   customers: { | ||||
|     title: 'Clientes', | ||||
|     add_customer: 'Agregar cliente', | ||||
|     contacts_list: 'Lista de clientes', | ||||
|     name: 'Nombre', | ||||
|     display_name: 'Nombre para mostrar', | ||||
|     primary_contact_name: 'Nombre de contacto primario', | ||||
|     contact_name: 'Nombre de contacto', | ||||
|     amount_due: 'Monto adeudado', | ||||
|     email: 'Email', | ||||
|     address: 'Habla a', | ||||
|     phone: 'Teléfono', | ||||
|     website: 'Sitio web', | ||||
|     country: 'País', | ||||
|     state: 'Estado', | ||||
|     city: 'Ciudad', | ||||
|     zip_code: 'Código postal', | ||||
|     added_on: 'Añadido', | ||||
|     action: 'Acción', | ||||
|     password: 'Contraseña', | ||||
|     street_number: 'Número de calle', | ||||
|     primary_currency: 'Moneda primaria', | ||||
|     add_new_customer: 'Agregar nuevo cliente', | ||||
|     save_customer: 'Guardar cliente', | ||||
|     update_customer: 'Actualizar cliente', | ||||
|     customer: 'Cliente | Clientes', | ||||
|     new_customer: 'Nuevo cliente', | ||||
|     edit_customer: 'Editar cliente', | ||||
|     basic_info: 'Información básica', | ||||
|     billing_address: 'Dirección de Envio', | ||||
|     shipping_address: 'Dirección de Envío', | ||||
|     copy_billing_address: 'Copia de facturación', | ||||
|     no_customers: '¡Aún no hay clientes!', | ||||
|     no_customers_found: 'No se encontraron clientes!', | ||||
|     list_of_customers: 'Esta sección contendrá la lista de clientes.', | ||||
|     primary_display_name: 'Nombre de visualización principal', | ||||
|     select_state: 'Seleccione estado', | ||||
|     select_country: 'Seleccionar país', | ||||
|     select_city: 'Ciudad selecta', | ||||
|     select_currency: 'Seleccione el tipo de moneda', | ||||
|     street_1: 'Calle 1', | ||||
|     street_2: 'Calle 2', | ||||
|     select_a_customer: 'Selecciona un cliente', | ||||
|     type_or_click: 'Escriba o haga clic para seleccionar', | ||||
|  | ||||
|     confirm_delete: 'No podrá recuperar este cliente | No podrá recuperar estos clientes', | ||||
|     created_message: 'Cliente creado con éxito', | ||||
|     updated_message: 'Cliente actualizado con éxito', | ||||
|     deleted_message: 'Cliente eliminado correctamente | Clientes eliminados exitosamente' | ||||
|   }, | ||||
|   items: { | ||||
|     title: 'Artículos', | ||||
|     items_list: 'Lista de artículos', | ||||
|     name: 'Nombre', | ||||
|     unit: 'Unidad', | ||||
|     description: 'Descripción', | ||||
|     added_on: 'Añadido', | ||||
|     price: 'Precio', | ||||
|     date_of_creation: 'Fecha de creación', | ||||
|     action: 'Acción', | ||||
|     add_item: 'Añadir artículo', | ||||
|     save_item: 'Guardar artículo', | ||||
|     update_item: 'Actualizar elemento', | ||||
|     item: 'Artículo | Artículos', | ||||
|     add_new_item: 'Agregar ítem nuevo', | ||||
|     new_item: 'Nuevo artículo', | ||||
|     edit_item: 'Editar elemento', | ||||
|     no_items: '¡Aún no hay artículos!', | ||||
|     list_of_items: 'Esta sección contendrá la lista de artículos.', | ||||
|     select_a_unit: 'seleccione unidad', | ||||
|  | ||||
|     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', | ||||
|     created_message: 'Artículo creado con éxito', | ||||
|     updated_message: 'Artículo actualizado con éxito', | ||||
|     deleted_message: 'Elemento eliminado con éxito | Elementos eliminados correctamente' | ||||
|   }, | ||||
|   estimates: { | ||||
|     title: 'Estimadas', | ||||
|     estimate: 'Estimación | Estimados', | ||||
|     estimates_list: 'Lista de estimaciones', | ||||
|     days: '{días} días', | ||||
|     months: '{meses} Mes', | ||||
|     years: '{años} Año', | ||||
|     all: 'Todas', | ||||
|     paid: 'Pagada', | ||||
|     unpaid: 'No pagado', | ||||
|     customer: 'CLIENTE', | ||||
|     ref_no: 'NÚMERO DE REFERENCIA.', | ||||
|     number: 'NÚMERO', | ||||
|     amount_due: 'CANTIDAD DEBIDA', | ||||
|     partially_paid: 'Parcialmente pagado', | ||||
|     total: 'Total', | ||||
|     discount: 'Descuento', | ||||
|     sub_total: 'Subtotal', | ||||
|     estimate_number: 'Numero Estimado', | ||||
|     ref_number: 'Número de referencia', | ||||
|     contact: 'Contacto', | ||||
|     add_item: 'Agregar un artículo', | ||||
|     date: 'Fecha', | ||||
|     due_date: 'Fecha de vencimiento', | ||||
|     expiry_date: 'Fecha de caducidad', | ||||
|     status: 'Estado', | ||||
|     add_tax: 'Agregar impuesto', | ||||
|     amount: 'Cantidad', | ||||
|     action: 'Acción', | ||||
|     notes: 'Notas', | ||||
|     tax: 'Impuesto', | ||||
|     send_estimate: 'Enviar presupuesto', | ||||
|     estimate_template: 'Plantilla de estimación', | ||||
|     convert_to_invoice: 'Convertir a factura', | ||||
|     mark_as_sent: 'Marcar como enviado', | ||||
|     record_payment: 'Registro de pago', | ||||
|     add_estimate: 'Agregar presupuesto', | ||||
|     save_estimate: 'Guardar estimación', | ||||
|     confirm_conversion: '¿Quiere convertir esta estimación en factura?', | ||||
|     conversion_message: 'Conversión exitosa', | ||||
|     confirm_send_estimate: 'Esta estimación se enviará por correo electrónico al cliente', | ||||
|     confirm_mark_as_sent: 'Esta estimación se marcará como enviada', | ||||
|     confirm_mark_as_accepted: 'Esta estimación se marcará como Aceptada', | ||||
|     confirm_mark_as_rejected: 'Esta estimación se marcará como Rechazada', | ||||
|     mark_as_sent_successfully: 'Estimación marcada como enviada correctamente', | ||||
|     send_estimate_successfully: 'Estimación enviada con éxito', | ||||
|     errors: { | ||||
|       required: 'Se requiere campo' | ||||
|     }, | ||||
|     accepted: 'Aceptada', | ||||
|     sent: 'Expedida', | ||||
|     draft: 'Sequía', | ||||
|     declined: 'Rechazada', | ||||
|     new_estimate: 'Nueva estimación', | ||||
|     add_new_estimate: 'Añadir nuevo presupuesto', | ||||
|     update_Estimate: 'Actualizar presupuesto', | ||||
|     edit_estimate: 'Editar estimación', | ||||
|     items: 'artículos', | ||||
|     Estimate: 'Estimación | Estimados', | ||||
|     add_new_tax: 'Agregar nuevo impuesto', | ||||
|     no_estimates: '¡Aún no hay estimaciones!', | ||||
|     list_of_estimates: 'Esta sección contendrá la lista de estimaciones.', | ||||
|     mark_as_rejected: 'Marcar como rechazado', | ||||
|     mark_as_accepted: 'Marcar como aceptado', | ||||
|  | ||||
|     marked_as_accepted_message: 'Estimación marcada como aceptada', | ||||
|     marked_as_rejected_message: 'Estimación marcada como rechazada', | ||||
|     confirm_delete: 'No podrá recuperar esta estimación | No podrá recuperar estas estimaciones', | ||||
|     created_message: 'Estimación creada con éxito', | ||||
|     updated_message: 'Estimación actualizada con éxito', | ||||
|     deleted_message: 'Estimación eliminada con éxito | Estimaciones eliminadas exitosamente', | ||||
|     item: { | ||||
|       title: 'Título del artículo', | ||||
|       description: 'Descripción', | ||||
|       quantity: 'Quantity', | ||||
|       price: 'Precio', | ||||
|       discount: 'Descuento', | ||||
|       total: 'Total', | ||||
|       total_discount: 'Descuento total', | ||||
|       sub_total: 'Subtotal', | ||||
|       tax: 'Impuesto', | ||||
|       amount: 'Cantidad', | ||||
|       select_an_item: 'Escriba o haga clic para seleccionar un elemento', | ||||
|       type_item_description: 'Tipo Elemento Descripción (opcional)' | ||||
|     } | ||||
|   }, | ||||
|   invoices: { | ||||
|     title: 'Facturas', | ||||
|     invoices_list: 'Lista de facturas', | ||||
|     days: '{días} días', | ||||
|     months: '{meses} Mes', | ||||
|     years: '{años} Año', | ||||
|     all: 'Todas', | ||||
|     paid: 'Pagada', | ||||
|     unpaid: 'No pagado', | ||||
|     customer: 'CLIENTE', | ||||
|     paid_status: 'ESTADO PAGADO', | ||||
|     ref_no: 'NÚMERO DE REFERENCIA.', | ||||
|     number: 'NÚMERO', | ||||
|     amount_due: 'CANTIDAD DEBIDA', | ||||
|     partially_paid: 'Parcialmente pagado', | ||||
|     total: 'Total', | ||||
|     discount: 'Descuento', | ||||
|     sub_total: 'Subtotal', | ||||
|     invoice: 'Factura | Facturas', | ||||
|     invoice_number: 'Numero de factura', | ||||
|     ref_number: 'Número de referencia', | ||||
|     contact: 'Contacto', | ||||
|     add_item: 'Agregar un artículo', | ||||
|     date: 'Fecha', | ||||
|     due_date: 'Fecha de vencimiento', | ||||
|     status: 'Estado', | ||||
|     add_tax: 'Agregar impuesto', | ||||
|     amount: 'Cantidad', | ||||
|     action: 'Acción', | ||||
|     notes: 'Notas', | ||||
|     view: 'Ver', | ||||
|     send_invoice: 'Enviará la factura', | ||||
|     invoice_template: 'Plantilla de factura', | ||||
|     template: 'Modelo', | ||||
|     mark_as_sent: 'Marcar como enviado', | ||||
|     invoice_mark_as_sent: 'Esta factura se marcará como enviada', | ||||
|     confirm_send: 'Estas facturas se enviarán por correo electrónico al cliente.', | ||||
|     invoice_date: 'Fecha de la factura', | ||||
|     record_payment: 'Registro de pago', | ||||
|     add_new_invoice: 'Añadir nueva factura', | ||||
|     update_expense: 'Gastos de actualización', | ||||
|     edit_invoice: 'Editar factura', | ||||
|     new_invoice: 'Nueva factura', | ||||
|     save_invoice: 'Guardar factura', | ||||
|     update_invoice: 'Actualizar factura', | ||||
|     add_new_tax: 'Agregar nuevo impuesto', | ||||
|     no_invoices: '¡Aún no hay facturas!', | ||||
|     list_of_invoices: 'Esta sección contendrá la lista de facturas.', | ||||
|     select_invoice: 'Seleccionar factura', | ||||
|     mark_as_sent_successfully: 'Factura marcada como enviada con éxito', | ||||
|     send_invoice_successfully: 'Factura enviada exitosamente', | ||||
|     item: { | ||||
|       title: 'Título del artículo', | ||||
|       description: 'Descripción', | ||||
|       quantity: 'Cantidad', | ||||
|       price: 'Precio', | ||||
|       discount: 'Descuento', | ||||
|       total: 'Total', | ||||
|       total_discount: 'Descuento total', | ||||
|       sub_total: 'Subtotal', | ||||
|       tax: 'Impuesto', | ||||
|       amount: 'Cantidad', | ||||
|       select_an_item: 'Escriba o haga clic para seleccionar un elemento', | ||||
|       type_item_description: 'Tipo Elemento Descripción (opcional)' | ||||
|     }, | ||||
|     payment_attached_message: 'Una de las facturas seleccionadas ya tiene un pago adjunto. Asegúrese de eliminar primero los pagos adjuntos para continuar con la eliminación', | ||||
|     confirm_delete: 'No podrá recuperar esta factura | No podrá recuperar estas facturas', | ||||
|     created_message: 'Factura creada exitosamente', | ||||
|     updated_message: 'Factura actualizada exitosamente', | ||||
|     deleted_message: 'Factura eliminada con éxito | Facturas borradas exitosamente', | ||||
|     marked_as_sent_message: 'Factura marcada como enviada con éxito', | ||||
|     invalid_due_amount_message: 'El pago ingresado es mayor que el monto total adeudado por esta factura. Por favor verifique y vuelva a intentar' | ||||
|   }, | ||||
|   credit_notes: { | ||||
|     title: 'Notas de credito', | ||||
|     credit_notes_list: 'Lista de notas de crédito', | ||||
|     // Fields | ||||
|     credit_notes: 'Notas de credito', | ||||
|     contact: 'Contacto', | ||||
|     date: 'Fecha', | ||||
|     amount: 'Cantidad', | ||||
|     action: 'Acción', | ||||
|     credit_number: 'Número de crédito', | ||||
|     notes: 'Notas', | ||||
|     confirm_delete: '¿Desea eliminar esta nota de crédito?', | ||||
|     item: { | ||||
|       title: 'Título del artículo', | ||||
|       description: 'Descripción', | ||||
|       quantity: 'Cantidad', | ||||
|       price: 'Precio', | ||||
|       discount: 'Descuento', | ||||
|       total: 'Total', | ||||
|       total_discount: 'Descuento total', | ||||
|       sub_total: 'Subtotal', | ||||
|       tax: 'Impuesto' | ||||
|     } | ||||
|   }, | ||||
|   payments: { | ||||
|     title: 'Pagos', | ||||
|     payments_list: 'Lista de pagos', | ||||
|     record_payment: 'Registro de pago', | ||||
|     // Fields | ||||
|     customer: 'Cliente', | ||||
|     date: 'Fecha', | ||||
|     amount: 'Cantidad', | ||||
|     action: 'Acción', | ||||
|     payment_number: 'Numero de pago', | ||||
|     payment_mode: 'Modo de pago', | ||||
|     invoice: 'Factura', | ||||
|     note: 'Nota', | ||||
|     add_payment: 'Agregar pago', | ||||
|     new_payment: 'Nuevo pago', | ||||
|     edit_payment: 'Editar pago', | ||||
|     view_payment: 'Ver pago', | ||||
|     add_new_payment: 'Agregar nuevo pago', | ||||
|     save_payment: 'Guardar pago', | ||||
|     update_payment: 'Actualizar pago', | ||||
|     payment: 'Pago | Pagos', | ||||
|     no_payments: '¡Aún no hay pagos!', | ||||
|     list_of_payments: 'Esta sección contendrá la lista de pagos.', | ||||
|     select_payment_mode: 'Seleccionar modo de pago', | ||||
|  | ||||
|     confirm_delete: 'No podrá recuperar este pago | No podrá recuperar estos pagos', | ||||
|     created_message: 'Pago creado con éxito', | ||||
|     updated_message: 'Pago actualizado con éxito', | ||||
|     deleted_message: 'Pago eliminado con éxito | Pagos eliminados exitosamente', | ||||
|     invalid_amount_message: 'El importe del pago no es válido.' | ||||
|   }, | ||||
|   expenses: { | ||||
|     title: 'Gastos', | ||||
|     expenses_list: 'Lista de gastos', | ||||
|     // Fields | ||||
|     expense_title: 'Título', | ||||
|     contact: 'Contacto', | ||||
|     category: 'Categoría', | ||||
|     from_date: 'Partir de la fecha', | ||||
|     to_date: 'Hasta la fecha', | ||||
|     expense_date: 'Fecha', | ||||
|     description: 'Descripción', | ||||
|     receipt: 'Recibo', | ||||
|     amount: 'Cantidad', | ||||
|     action: 'Acción', | ||||
|     note: 'Nota', | ||||
|     category_id: 'Categoria ID', | ||||
|     date: 'Fecha de gastos', | ||||
|     add_expense: 'Añadir gastos', | ||||
|     add_new_expense: 'Añadir nuevo gasto', | ||||
|     save_expense: 'Ahorre gastos', | ||||
|     update_expense: 'Gastos de actualización', | ||||
|     download_receipt: 'Descargar recibo', | ||||
|     edit_expense: 'Editar gasto', | ||||
|     new_expense: 'Nuevo gasto', | ||||
|     expense: 'Gastos | Gastos', | ||||
|     no_expenses: 'No hay gastos todavía!', | ||||
|     list_of_expenses: 'Esta sección contendrá la lista de gastos.', | ||||
|  | ||||
|     confirm_delete: 'No podrá recuperar este gasto | No podrá recuperar estos gastos', | ||||
|     created_message: 'Gastos creados exitosamente', | ||||
|     updated_message: 'Gastos actualizados con éxito', | ||||
|     deleted_message: 'Gastos eliminados con éxito | Gastos eliminados exitosamente', | ||||
|     categories: { | ||||
|       categories_list: 'Lista de categorías', | ||||
|       title: 'Título', | ||||
|       name: 'Nombre', | ||||
|       description: 'Descripción', | ||||
|       amount: 'Cantidad', | ||||
|       actions: 'Comportamiento', | ||||
|       add_category: 'añadir categoría', | ||||
|       new_category: 'Nueva categoría', | ||||
|       category: 'Categoría | Categorias', | ||||
|       select_a_category: 'Seleccione una categoría' | ||||
|     } | ||||
|   }, | ||||
|   login: { | ||||
|     email: 'Email', | ||||
|     password: 'Contraseña', | ||||
|     forgot_password: '¿Se te olvidó tu contraseña?', | ||||
|     or_signIn_with: 'o Inicie sesión con:', | ||||
|     login: 'Iniciar sesión', | ||||
|     register: 'Registro', | ||||
|     reset_password: 'Restablecer la contraseña', | ||||
|     enter_email: 'Ingrese correo electrónico', | ||||
|     enter_password: 'Introducir la contraseña', | ||||
|     retype_password: 'Retype Password', | ||||
|     login_placeholder: 'mail@example.com' | ||||
|   }, | ||||
|   reports: { | ||||
|     title: 'Reporte', | ||||
|     from_date: 'Partir de la fecha', | ||||
|     to_date: 'Hasta la fecha', | ||||
|     status: 'Estado', | ||||
|     paid: 'Pagada', | ||||
|     unpaid: 'No pagado', | ||||
|     download_pdf: 'Descargar PDF', | ||||
|     view_pdf: 'Ver PDF', | ||||
|     update_report: 'Informe de actualización', | ||||
|     report: 'Informe | Informes', | ||||
|     profit_loss: { | ||||
|       profit_loss: 'Pérdida de beneficios', | ||||
|       to_date: 'Hasta la fecha', | ||||
|       from_date: 'Partir de la fecha', | ||||
|       date_range: 'Seleccionar rango de fechas' | ||||
|     }, | ||||
|     sales: { | ||||
|       sales: 'Ventas', | ||||
|       date_range: 'Seleccionar rango de fechas', | ||||
|       to_date: 'Hasta la fecha', | ||||
|       from_date: 'Partir de la fecha', | ||||
|       report_type: 'Tipo de informe' | ||||
|     }, | ||||
|     taxes: { | ||||
|       taxes: 'Impuestos', | ||||
|       to_date: 'Hasta la fecha', | ||||
|       from_date: 'Partir de la fecha', | ||||
|       date_range: 'Seleccionar rango de fechas' | ||||
|     }, | ||||
|     errors: { | ||||
|       required: 'Se requiere campo' | ||||
|     }, | ||||
|     invoices: { | ||||
|       invoice: 'Factura', | ||||
|       invoice_date: 'Fecha de la factura', | ||||
|       due_date: 'Fecha de vencimiento', | ||||
|       amount: 'Cantidad', | ||||
|       contact_name: 'Nombre de contacto', | ||||
|       status: 'Estado' | ||||
|     }, | ||||
|     estimates: { | ||||
|       estimate: 'Estimar', | ||||
|       estimate_date: 'Fecha estimada', | ||||
|       due_date: 'Fecha de vencimiento', | ||||
|       estimate_number: 'Numero Estimado', | ||||
|       ref_number: 'Número de referencia', | ||||
|       amount: 'Cantidad', | ||||
|       contact_name: 'Nombre de contacto', | ||||
|       status: 'Estado' | ||||
|     }, | ||||
|     expenses: { | ||||
|       expenses: 'Gastos', | ||||
|       category: 'Categoría', | ||||
|       date: 'Fecha', | ||||
|       amount: 'Cantidad', | ||||
|       to_date: 'Hasta la fecha', | ||||
|       from_date: 'Partir de la fecha', | ||||
|       date_range: 'Seleccionar rango de fechas' | ||||
|     } | ||||
|   }, | ||||
|   settings: { | ||||
|     menu_title: { | ||||
|       account_settings: 'Configuraciones de la cuenta', | ||||
|       company_information: 'Información de la empresa', | ||||
|       preferences: 'Preferencias', | ||||
|       notifications: 'Notificaciones', | ||||
|       tax_types: 'Tipos de impuestos', | ||||
|       expense_category: 'Categorías de gastos', | ||||
|       update_app: 'Actualizar aplicación' | ||||
|     }, | ||||
|     title: 'Configuraciones', | ||||
|     setting: 'Configuraciones | Configuraciones', | ||||
|     general: 'General', | ||||
|     language: 'Idioma', | ||||
|     primary_currency: 'Moneda primaria', | ||||
|     timezone: 'Zona horaria', | ||||
|     date_format: 'Formato de fecha', | ||||
|     currencies: { | ||||
|       title: 'Monedas', | ||||
|       currency: 'Moneda | Monedas', | ||||
|       currencies_list: 'Lista de monedas', | ||||
|       select_currency: 'Seleccione el tipo de moneda', | ||||
|       name: 'Nombre', | ||||
|       code: 'Código', | ||||
|       symbol: 'Símbolo', | ||||
|       precision: 'Precisión', | ||||
|       thousand_separator: 'Mil separadores', | ||||
|       decimal_separator: 'Separador decimal', | ||||
|       position: 'Posición', | ||||
|       position_of_symbol: 'Posición del símbolo', | ||||
|       right: 'Derecho', | ||||
|       left: 'Izquierda', | ||||
|       action: 'Acción', | ||||
|       add_currency: 'Agregar moneda' | ||||
|     }, | ||||
|     mail: { | ||||
|       host: 'Host de correo', | ||||
|       port: 'Puerto de correo', | ||||
|       driver: 'Conductor de correo', | ||||
|       secret: 'Secreto', | ||||
|       password: 'Contraseña de correo', | ||||
|       username: 'Nombre de usuario de correo', | ||||
|       mailgun_secret: 'Mailgun Secreto', | ||||
|       mailgun_domain: 'Domino', | ||||
|       mailgun_endpoint: 'Mailgun Punto Final', | ||||
|       ses_secret: 'SES Secreto', | ||||
|       ses_key: 'SES llave', | ||||
|       from_name: 'Del nombre del correo', | ||||
|       from_mail: 'Desde la dirección de correo', | ||||
|       mail_config: 'Configuración de correo', | ||||
|       encryption: 'Cifrado de correo', | ||||
|       mail_config_desc: 'Los detalles a continuación se utilizarán para actualizar el entorno de correo. También puede cambiar los detalles en cualquier momento después de iniciar sesión.' | ||||
|     }, | ||||
|     pdf: { | ||||
|       title: 'Configuración de PDF', | ||||
|       footer_text: 'Texto de pie de página', | ||||
|       pdf_layout: 'Diseño PDF' | ||||
|     }, | ||||
|     company_info: { | ||||
|       company_info: 'Información de la compañía', | ||||
|       company_name: 'nombre de empresa', | ||||
|       company_logo: 'Logo de la compañía', | ||||
|       section_description: 'Información sobre su empresa que se mostrará en las facturas, estimaciones y otros documentos creados por Crater.', | ||||
|       phone: 'Teléfono', | ||||
|       country: 'País', | ||||
|       state: 'Estado', | ||||
|       city: 'Ciudad', | ||||
|       address: 'Habla a', | ||||
|       zip: 'Código Postal', | ||||
|       save: 'Salvar', | ||||
|       updated_message: 'Información de la empresa actualizada con éxito' | ||||
|     }, | ||||
|     account_settings: { | ||||
|       name: 'Nombre', | ||||
|       email: 'Email', | ||||
|       password: 'Contraseña', | ||||
|       confirm_password: 'Confirmar contraseña', | ||||
|       account_settings: 'Configuraciones de la cuenta', | ||||
|       save: 'Salvar', | ||||
|       section_description: 'Puede actualizar su nombre, correo electrónico y contraseña utilizando el siguiente formulario.', | ||||
|       updated_message: 'Configuración de la cuenta actualizada correctamente' | ||||
|     }, | ||||
|     user_profile: { | ||||
|       name: 'Nombre', | ||||
|       email: 'Email', | ||||
|       password: 'Contraseña', | ||||
|       confirm_password: 'Confirmar contraseña' | ||||
|     }, | ||||
|     notification: { | ||||
|       title: 'Notificación', | ||||
|       email: 'Enviar notificaciones a', | ||||
|       description: '¿Qué notificaciones por correo electrónico le gustaría recibir cuando algo cambia?', | ||||
|       invoice_viewed: 'Factura vista', | ||||
|       invoice_viewed_desc: 'Cuando su cliente ve la factura enviada a través del panel de control del cráter.', | ||||
|       estimate_viewed: 'Estimación vista', | ||||
|       estimate_viewed_desc: 'Cuando su cliente ve la estimación enviada a través del panel de control del cráter.', | ||||
|       save: 'Salvar', | ||||
|       email_save_message: 'Correo electrónico guardado con éxito', | ||||
|       please_enter_email: 'Por favor, introduzca su correo electrónico' | ||||
|     }, | ||||
|     tax_types: { | ||||
|       title: 'Tipos de impuestos', | ||||
|       add_tax: 'Agregar impuesto', | ||||
|       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', | ||||
|       tax_settings: 'Configuraciones de impuestos', | ||||
|       tax_per_item: 'Impuesto por artículo', | ||||
|       tax_name: 'Nombre fiscal', | ||||
|       compound_tax: 'Impuesto compuesto', | ||||
|       percent: 'Por ciento', | ||||
|       action: 'Acción', | ||||
|       tax_setting_description: 'Habilítelo si desea agregar impuestos a artículos de factura individuales. Por defecto, los impuestos se agregan directamente a la factura.', | ||||
|       created_message: 'Tipo de impuesto creado con éxito', | ||||
|       updated_message: 'Tipo de impuesto actualizado correctamente', | ||||
|       deleted_message: 'Tipo de impuesto eliminado correctamente', | ||||
|       confirm_delete: 'No podrá recuperar este tipo de impuesto', | ||||
|       already_in_use: 'El impuesto ya está en uso.' | ||||
|     }, | ||||
|     expense_category: { | ||||
|       title: 'Categorías de gastos', | ||||
|       action: 'Acción', | ||||
|       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', | ||||
|       category_name: 'nombre de la categoría', | ||||
|       category_description: 'Descripción', | ||||
|       created_message: 'Categoría de gastos creada con éxito', | ||||
|       deleted_message: 'Categoría de gastos eliminada correctamente', | ||||
|       updated_message: 'Categoría de gastos actualizada con éxito', | ||||
|       confirm_delete: 'No podrá recuperar esta categoría de gastos', | ||||
|       already_in_use: 'La categoría ya está en uso.' | ||||
|     }, | ||||
|     preferences: { | ||||
|       currency: 'Moneda', | ||||
|       language: 'Idioma', | ||||
|       time_zone: 'Zona horaria', | ||||
|       fiscal_year: 'Año financiero', | ||||
|       date_format: 'Formato de fecha', | ||||
|       discount_setting: 'Ajuste de descuento', | ||||
|       discount_per_item: 'Descuento por artículo', | ||||
|       discount_setting_description: 'Habilítelo si desea agregar Descuento a artículos de factura individuales. Por defecto, los descuentos se agregan directamente a la factura.', | ||||
|       save: 'Salvar', | ||||
|       preference: 'Preferencia | Preferencias', | ||||
|       general_settings: 'Preferencias predeterminadas para el sistema.', | ||||
|       updated_message: 'Preferencias actualizadas exitosamente', | ||||
|       select_language: 'seleccione el idioma', | ||||
|       select_time_zone: 'selecciona la zona horaria', | ||||
|       select_date_formate: 'seleccione formato de fecha', | ||||
|       select_financial_year: 'seleccione año financiero' | ||||
|     }, | ||||
|     update_app: { | ||||
|       title: 'Actualizar aplicación', | ||||
|       description: 'actualizar la descripción de la aplicación', | ||||
|       check_update: 'Buscar actualizaciones', | ||||
|       avail_update: 'Nueva actualización disponible', | ||||
|       next_version: 'Próxima versión', | ||||
|       update: 'Actualizar', | ||||
|       update_progress: 'Actualización en progreso...', | ||||
|       progress_text: 'Solo tomará unos minutos. No actualice la pantalla ni cierre la ventana antes de que finalice la actualización.', | ||||
|       update_success: 'La aplicación se actualizó correctamente', | ||||
|       latest_message: '¡Actualización no disponible! Estás en la última versión.', | ||||
|       current_version: 'Versión actual' | ||||
|     } | ||||
|   }, | ||||
|   wizard: { | ||||
|     account_info: 'Información de la cuenta', | ||||
|     account_info_desc: 'Los detalles a continuación se utilizarán para crear la cuenta principal de administrador. También puede cambiar los detalles en cualquier momento después de iniciar sesión.', | ||||
|     name: 'Nombre', | ||||
|     email: 'Email', | ||||
|     password: 'Contraseña', | ||||
|     confirm_password: 'Confirmar contraseña', | ||||
|     save_cont: 'Guardar Continuar', | ||||
|     company_info: 'Información de la empresa', | ||||
|     company_info_desc: 'Esta información se mostrará en las facturas. Tenga en cuenta que puede editar esto más adelante en la página de configuración.', | ||||
|     company_name: 'nombre de empresa', | ||||
|     company_logo: 'Logo de la compañía', | ||||
|     logo_preview: 'Vista previa del logotipo', | ||||
|     preferences: 'Preferencias', | ||||
|     preferences_desc: 'Preferencias predeterminadas para el sistema.', | ||||
|     country: 'País', | ||||
|     state: 'Estado', | ||||
|     city: 'Ciudad', | ||||
|     address: 'Habla a', | ||||
|     street: 'Calle1 ' | 'Calle # 2', | ||||
|     phone: 'Teléfono', | ||||
|     zip_code: 'Código postal', | ||||
|     go_back: 'Regresa', | ||||
|     currency: 'Moneda', | ||||
|     language: 'Idioma', | ||||
|     time_zone: 'Zona horaria', | ||||
|     fiscal_year: 'Año financiero', | ||||
|     date_format: 'Formato de fecha', | ||||
|     from_address: 'De la Dirección', | ||||
|     username: 'Nombre de usuario', | ||||
|     next: 'Próximo', | ||||
|     continue: 'Hacer continuación', | ||||
|     database: { | ||||
|       database: 'URL del sitio y base de datose', | ||||
|       connection: 'Conexión de base de datos', | ||||
|       host: 'Database Host', | ||||
|       port: 'Host de base de datos', | ||||
|       password: 'Contraseña de base de datos', | ||||
|       app_url: 'URL de la aplicación', | ||||
|       username: 'Nombre de usuario de la base de datos', | ||||
|       db_name: 'Nombre de la base de datos', | ||||
|       desc: 'Cree una base de datos en su servidor y establezca las credenciales utilizando el siguiente formulario.' | ||||
|     }, | ||||
|     permissions: { | ||||
|       permissions: 'Permisos', | ||||
|       permission_desc: 'A continuación se muestra la lista de permisos de carpeta necesarios para que la aplicación funcione. Si la verificación de permisos falla, asegúrese de actualizar los permisos de su carpeta.' | ||||
|     }, | ||||
|     mail: { | ||||
|       host: 'Host de correo', | ||||
|       port: 'Puerto de correo', | ||||
|       driver: 'Conductor de correo', | ||||
|       secret: 'Secreto', | ||||
|       password: 'Contraseña de correo', | ||||
|       username: 'Nombre de usuario de correo', | ||||
|       mailgun_secret: 'Mailgun Secreto', | ||||
|       mailgun_domain: 'Domino', | ||||
|       mailgun_endpoint: 'Mailgun Punto Final', | ||||
|       ses_secret: 'SES Secreto', | ||||
|       ses_key: 'SES llave', | ||||
|       from_name: 'Del nombre del correo', | ||||
|       from_mail: 'Desde la dirección de correo', | ||||
|       mail_config: 'Configuración de correo', | ||||
|       encryption: 'Cifrado de correo', | ||||
|       mail_config_desc: 'Los detalles a continuación se utilizarán para actualizar el entorno de correo. También puede cambiar los detalles en cualquier momento después de iniciar sesión.' | ||||
|     }, | ||||
|     req: { | ||||
|       system_req: 'Requisitos del sistema', | ||||
|       php_req_version: 'Php (versión {version} necesario)', | ||||
|       check_req: 'Consultar requisitos', | ||||
|       system_req_desc: 'Crater tiene algunos requisitos de servidor. Asegúrese de que su servidor tenga la versión de php requerida y todas las extensiones mencionadas a continuación.' | ||||
|     }, | ||||
|     errors: { | ||||
|       migrate_failed: 'La migración falló', | ||||
|       database_variables_save_error: 'No se puede conectar a la base de datos con los valores proporcionados.', | ||||
|       mail_variables_save_error: 'La configuración del correo electrónico ha fallado.', | ||||
|       connection_failed: 'Conexión de base de datos fallida' | ||||
|     }, | ||||
|     success: { | ||||
|       mail_variables_save_successfully: 'Correo electrónico configurado correctamente', | ||||
|       database_variables_save_successfully: 'Base de datos configurada con éxito.' | ||||
|     } | ||||
|   }, | ||||
|   layout_login: { | ||||
|     copyright_crater: 'Copyright @ Crater - 2019', | ||||
|     super_simple_invoicing: 'Facturación super simple', | ||||
|     for_freelancer: 'para autónomos y', | ||||
|     small_businesses: 'Pequeñas empresas', | ||||
|     crater_help: 'Crater te ayuda a rastrear gastos, registrar pagos y generar hermosos', | ||||
|     invoices_and_estimates: 'facturas y presupuestos con capacidad para elegir múltiples plantillas.' | ||||
|  | ||||
|   }, | ||||
|   validation: { | ||||
|     invalid_url: 'URL no válida (por ejemplo, http://www.crater.com)', | ||||
|     required: 'Se requiere campo', | ||||
|     email_incorrect: 'Email incorrecto.', | ||||
|     email_does_not_exist: ' Usuario con correo electrónico dado no existe', | ||||
|     send_reset_link: 'Enviar restablecer enlace', | ||||
|     not_yet: '¿Aún no? Envialo de nuevo', | ||||
|     password_min_length: 'La contraseña debe contener {count} caracteres', | ||||
|     name_min_length: 'El nombre debe tener al menos {count} letras.', | ||||
|     enter_valid_tax_rate: 'Ingrese una tasa impositiva válida', | ||||
|     numbers_only: 'Solo numeros.', | ||||
|     characters_only: 'Solo personajes.', | ||||
|     password_incorrect: 'Las contraseñas deben ser idénticas', | ||||
|     password_length: 'La contraseña debe tener 5 caracteres de longitud.', | ||||
|     qty_must_greater_than_zero: 'La cantidad debe ser mayor que cero.', | ||||
|     price_greater_than_zero: 'El precio debe ser mayor que cero.', | ||||
|     payment_greater_than_zero: 'El pago debe ser mayor que cero.', | ||||
|     payment_greater_than_due_amount: 'El pago ingresado es mayor al monto adeudado de esta factura.', | ||||
|     quantity_maxlength: 'La cantidad no debe ser mayor de 20 dígitos.', | ||||
|     price_maxlength: 'El precio no debe ser mayor de 20 dígitos.', | ||||
|     price_minvalue: 'El precio debe ser mayor que 0 dígitos', | ||||
|     amount_maxlength: 'La cantidad no debe ser mayor de 20 dígitos.', | ||||
|     amount_minvalue: 'La cantidad debe ser mayor que 0 dígitos', | ||||
|     description_maxlength: 'La descripción no debe tener más de 255 caracteres.', | ||||
|     maximum_options_error: 'Máximo de {max} opciones seleccionadas. Primero elimine una opción seleccionada para seleccionar otra.', | ||||
|     notes_maxlength: 'Las notas no deben tener más de 255 caracteres.', | ||||
|     address_maxlength: 'La dirección no debe tener más de 255 caracteres.', | ||||
|     ref_number_maxlength: 'El número de referencia no debe tener más de 255 caracteres.' | ||||
|   } | ||||
| } | ||||
							
								
								
									
										811
									
								
								resources/assets/js/plugins/es.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										811
									
								
								resources/assets/js/plugins/es.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,811 @@ | ||||
| { | ||||
|   "navigation": { | ||||
|     "dashboard": "Tablero", | ||||
|     "customers": "Clientes", | ||||
|     "items": "Artículos", | ||||
|     "invoices": "Facturas", | ||||
|     "expenses": "Gastos", | ||||
|     "estimates": "Estimadas", | ||||
|     "payments": "Pagos", | ||||
|     "reports": "Informes", | ||||
|     "settings": "Configuraciones", | ||||
|     "logout": "Cerrar sesión" | ||||
|   }, | ||||
|   "general": { | ||||
|     "view_pdf": "Ver PDF", | ||||
|     "download_pdf": "Descargar PDF", | ||||
|     "save": "Salvar", | ||||
|     "cancel": "Cancelar", | ||||
|     "update": "Actualizar", | ||||
|     "download": "Descargar", | ||||
|     "from_date": "Partir de la fecha", | ||||
|     "to_date": "Hasta la fecha", | ||||
|     "from": "De", | ||||
|     "to": "A", | ||||
|     "go_back": "Regresa", | ||||
|     "back_to_login": "¿Atrás para iniciar sesión?", | ||||
|     "home": "Casa", | ||||
|     "filter": "Filtrar", | ||||
|     "delete": "Eliminar", | ||||
|     "edit": "Editar", | ||||
|     "view": "Ver", | ||||
|     "add_new_item": "Agregar ítem nuevo", | ||||
|     "clear_all": "Limpiar todo", | ||||
|     "showing": "Demostración", | ||||
|     "of": "de", | ||||
|     "actions": "Comportamiento", | ||||
|     "subtotal": "TOTAL PARCIAL", | ||||
|     "discount": "DESCUENTO", | ||||
|     "fixed": "Fija", | ||||
|     "percentage": "Porcentaje", | ||||
|     "tax": "IMPUESTO", | ||||
|     "total_amount": "CANTIDAD TOTAL", | ||||
|     "bill_to": "Cobrar a", | ||||
|     "ship_to": "Envie a", | ||||
|     "due": "Debida", | ||||
|     "draft": "Sequía", | ||||
|     "sent": "Expedida", | ||||
|     "all": "Todas", | ||||
|     "select_all": "Seleccionar todo", | ||||
|     "choose_file": "Haga clic aquí para elegir un archivo.", | ||||
|     "choose_template": "Elige una plantilla", | ||||
|     "choose": "Escoger", | ||||
|     "remove": "Eliminar", | ||||
|     "powered_by": "Energizado por", | ||||
|     "bytefury": "Bytefury", | ||||
|     "select_a_status": "Selecciona un estado", | ||||
|     "select_a_tax": "Selecciona un impuesto", | ||||
|     "search": "Buscar", | ||||
|     "are_you_sure": "¿Estás seguro?", | ||||
|     "list_is_empty": "La lista esta vacía.", | ||||
|     "no_tax_found": "¡No se encontraron impuestos!", | ||||
|     "four_zero_four": "404", | ||||
|     "you_got_lost": "Whoops! ¡Te perdiste!", | ||||
|     "go_home": "Vete a casa", | ||||
|  | ||||
|     "setting_updated": "Configuración actualizada con éxito", | ||||
|     "select_state": "Seleccione estado", | ||||
|     "select_country": "Seleccionar país", | ||||
|     "select_city": "Ciudad selecta", | ||||
|     "street_1": "Calle 1", | ||||
|     "street_2": "Calle # 2", | ||||
|     "action_failed": "Accion: Fallida" | ||||
|   }, | ||||
|   "dashboard": { | ||||
|     "select_year": "Seleccione año", | ||||
|     "cards": { | ||||
|       "due_amount": "Monto adeudado", | ||||
|       "customers": "Clientes", | ||||
|       "invoices": "Facturas", | ||||
|       "estimates": "Estimadas" | ||||
|     }, | ||||
|     "chart_info": { | ||||
|       "total_sales": "Ventas", | ||||
|       "total_receipts": "Ingresos", | ||||
|       "total_expense": "Gastos", | ||||
|       "net_income": "Lngresos netos", | ||||
|       "year": "Seleccione año" | ||||
|     }, | ||||
|     "weekly_invoices": { | ||||
|       "title": "Facturas semanales" | ||||
|     }, | ||||
|     "monthly_chart": { | ||||
|       "title": "Gastos de venta" | ||||
|     }, | ||||
|     "recent_invoices_card": { | ||||
|       "title": "Facturas adeudadas", | ||||
|       "due_on": "Debido a", | ||||
|       "customer": "Cliente", | ||||
|       "amount_due": "Monto adeudado", | ||||
|       "actions": "Comportamiento", | ||||
|       "view_all": "Ver todo" | ||||
|     }, | ||||
|     "recent_estimate_card": { | ||||
|       "title": "Estimaciones recientes", | ||||
|       "date": "Fecha", | ||||
|       "customer": "Cliente", | ||||
|       "amount_due": "Monto adeudado", | ||||
|       "actions": "Comportamiento", | ||||
|       "view_all": "Ver todo" | ||||
|     } | ||||
|   }, | ||||
|   "tax_types": { | ||||
|     "name": "Nombre", | ||||
|     "description": "Descripción", | ||||
|     "percent": "Por ciento", | ||||
|     "compound_tax": "Impuesto compuesto" | ||||
|   }, | ||||
|   "customers": { | ||||
|     "title": "Clientes", | ||||
|     "add_customer": "Agregar cliente", | ||||
|     "contacts_list": "Lista de clientes", | ||||
|     "name": "Nombre", | ||||
|     "display_name": "Nombre para mostrar", | ||||
|     "primary_contact_name": "Nombre de contacto primario", | ||||
|     "contact_name": "Nombre de contacto", | ||||
|     "amount_due": "Monto adeudado", | ||||
|     "email": "Email", | ||||
|     "address": "Habla a", | ||||
|     "phone": "Teléfono", | ||||
|     "website": "Sitio web", | ||||
|     "country": "País", | ||||
|     "state": "Estado", | ||||
|     "city": "Ciudad", | ||||
|     "zip_code": "Código postal", | ||||
|     "added_on": "Añadido", | ||||
|     "action": "Acción", | ||||
|     "password": "Contraseña", | ||||
|     "street_number": "Número de calle", | ||||
|     "primary_currency": "Moneda primaria", | ||||
|     "add_new_customer": "Agregar nuevo cliente", | ||||
|     "save_customer": "Guardar cliente", | ||||
|     "update_customer": "Actualizar cliente", | ||||
|     "customer": "Cliente | Clientes", | ||||
|     "new_customer": "Nuevo cliente", | ||||
|     "edit_customer": "Editar cliente", | ||||
|     "basic_info": "Información básica", | ||||
|     "billing_address": "Dirección de Envio", | ||||
|     "shipping_address": "Dirección de Envío", | ||||
|     "copy_billing_address": "Copia de facturación", | ||||
|     "no_customers": "¡Aún no hay clientes!", | ||||
|     "no_customers_found": "No se encontraron clientes!", | ||||
|     "list_of_customers": "Esta sección contendrá la lista de clientes.", | ||||
|     "primary_display_name": "Nombre de visualización principal", | ||||
|     "select_state": "Seleccione estado", | ||||
|     "select_country": "Seleccionar país", | ||||
|     "select_city": "Ciudad selecta", | ||||
|     "select_currency": "Seleccione el tipo de moneda", | ||||
|     "street_1": "Calle 1", | ||||
|     "street_2": "Calle 2", | ||||
|     "select_a_customer": "Selecciona un cliente", | ||||
|     "type_or_click": "Escriba o haga clic para seleccionar", | ||||
|  | ||||
|     "confirm_delete": "No podrá recuperar este cliente | No podrá recuperar estos clientes", | ||||
|     "created_message": "Cliente creado con éxito", | ||||
|     "updated_message": "Cliente actualizado con éxito", | ||||
|     "deleted_message": "Cliente eliminado correctamente | Clientes eliminados exitosamente" | ||||
|   }, | ||||
|   "items": { | ||||
|     "title": "Artículos", | ||||
|     "items_list": "Lista de artículos", | ||||
|     "name": "Nombre", | ||||
|     "unit": "Unidad", | ||||
|     "description": "Descripción", | ||||
|     "added_on": "Añadido", | ||||
|     "price": "Precio", | ||||
|     "date_of_creation": "Fecha de creación", | ||||
|     "action": "Acción", | ||||
|     "add_item": "Añadir artículo", | ||||
|     "save_item": "Guardar artículo", | ||||
|     "update_item": "Actualizar elemento", | ||||
|     "item": "Artículo | Artículos", | ||||
|     "add_new_item": "Agregar ítem nuevo", | ||||
|     "new_item": "Nuevo artículo", | ||||
|     "edit_item": "Editar elemento", | ||||
|     "no_items": "¡Aún no hay artículos!", | ||||
|     "list_of_items": "Esta sección contendrá la lista de artículos.", | ||||
|     "select_a_unit": "seleccione unidad", | ||||
|  | ||||
|     "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", | ||||
|     "created_message": "Artículo creado con éxito", | ||||
|     "updated_message": "Artículo actualizado con éxito", | ||||
|     "deleted_message": "Elemento eliminado con éxito | Elementos eliminados correctamente" | ||||
|   }, | ||||
|   "estimates": { | ||||
|     "title": "Estimadas", | ||||
|     "estimate": "Estimación | Estimados", | ||||
|     "estimates_list": "Lista de estimaciones", | ||||
|     "days": "{días} días", | ||||
|     "months": "{meses} Mes", | ||||
|     "years": "{años} Año", | ||||
|     "all": "Todas", | ||||
|     "paid": "Pagada", | ||||
|     "unpaid": "No pagado", | ||||
|     "customer": "CLIENTE", | ||||
|     "ref_no": "NÚMERO DE REFERENCIA.", | ||||
|     "number": "NÚMERO", | ||||
|     "amount_due": "CANTIDAD DEBIDA", | ||||
|     "partially_paid": "Parcialmente pagado", | ||||
|     "total": "Total", | ||||
|     "discount": "Descuento", | ||||
|     "sub_total": "Subtotal", | ||||
|     "estimate_number": "Numero Estimado", | ||||
|     "ref_number": "Número de referencia", | ||||
|     "contact": "Contacto", | ||||
|     "add_item": "Agregar un artículo", | ||||
|     "date": "Fecha", | ||||
|     "due_date": "Fecha de vencimiento", | ||||
|     "expiry_date": "Fecha de caducidad", | ||||
|     "status": "Estado", | ||||
|     "add_tax": "Agregar impuesto", | ||||
|     "amount": "Cantidad", | ||||
|     "action": "Acción", | ||||
|     "notes": "Notas", | ||||
|     "tax": "Impuesto", | ||||
|     "send_estimate": "Enviar presupuesto", | ||||
|     "estimate_template": "Plantilla de estimación", | ||||
|     "convert_to_invoice": "Convertir a factura", | ||||
|     "mark_as_sent": "Marcar como enviado", | ||||
|     "record_payment": "Registro de pago", | ||||
|     "add_estimate": "Agregar presupuesto", | ||||
|     "save_estimate": "Guardar estimación", | ||||
|     "confirm_conversion": "¿Quiere convertir esta estimación en factura?", | ||||
|     "conversion_message": "Conversión exitosa", | ||||
|     "confirm_send_estimate": "Esta estimación se enviará por correo electrónico al cliente", | ||||
|     "confirm_mark_as_sent": "Esta estimación se marcará como enviada", | ||||
|     "confirm_mark_as_accepted": "Esta estimación se marcará como Aceptada", | ||||
|     "confirm_mark_as_rejected": "Esta estimación se marcará como Rechazada", | ||||
|     "mark_as_sent_successfully": "Estimación marcada como enviada correctamente", | ||||
|     "send_estimate_successfully": "Estimación enviada con éxito", | ||||
|     "errors": { | ||||
|       "required": "Se requiere campo" | ||||
|     }, | ||||
|     "accepted": "Aceptada", | ||||
|     "sent": "Expedida", | ||||
|     "draft": "Sequía", | ||||
|     "declined": "Rechazada", | ||||
|     "new_estimate": "Nueva estimación", | ||||
|     "add_new_estimate": "Añadir nuevo presupuesto", | ||||
|     "update_Estimate": "Actualizar presupuesto", | ||||
|     "edit_estimate": "Editar estimación", | ||||
|     "items": "artículos", | ||||
|     "Estimate": "Estimación | Estimados", | ||||
|     "add_new_tax": "Agregar nuevo impuesto", | ||||
|     "no_estimates": "¡Aún no hay estimaciones!", | ||||
|     "list_of_estimates": "Esta sección contendrá la lista de estimaciones.", | ||||
|     "mark_as_rejected": "Marcar como rechazado", | ||||
|     "mark_as_accepted": "Marcar como aceptado", | ||||
|  | ||||
|     "marked_as_accepted_message": "Estimación marcada como aceptada", | ||||
|     "marked_as_rejected_message": "Estimación marcada como rechazada", | ||||
|     "confirm_delete": "No podrá recuperar esta estimación | No podrá recuperar estas estimaciones", | ||||
|     "created_message": "Estimación creada con éxito", | ||||
|     "updated_message": "Estimación actualizada con éxito", | ||||
|     "deleted_message": "Estimación eliminada con éxito | Estimaciones eliminadas exitosamente", | ||||
|     "item": { | ||||
|       "title": "Título del artículo", | ||||
|       "description": "Descripción", | ||||
|       "quantity": "Quantity", | ||||
|       "price": "Precio", | ||||
|       "discount": "Descuento", | ||||
|       "total": "Total", | ||||
|       "total_discount": "Descuento total", | ||||
|       "sub_total": "Subtotal", | ||||
|       "tax": "Impuesto", | ||||
|       "amount": "Cantidad", | ||||
|       "select_an_item": "Escriba o haga clic para seleccionar un elemento", | ||||
|       "type_item_description": "Tipo Elemento Descripción (opcional)" | ||||
|     } | ||||
|   }, | ||||
|   "invoices": { | ||||
|     "title": "Facturas", | ||||
|     "invoices_list": "Lista de facturas", | ||||
|     "days": "{días} días", | ||||
|     "months": "{meses} Mes", | ||||
|     "years": "{años} Año", | ||||
|     "all": "Todas", | ||||
|     "paid": "Pagada", | ||||
|     "unpaid": "No pagado", | ||||
|     "customer": "CLIENTE", | ||||
|     "paid_status": "ESTADO PAGADO", | ||||
|     "ref_no": "NÚMERO DE REFERENCIA.", | ||||
|     "number": "NÚMERO", | ||||
|     "amount_due": "CANTIDAD DEBIDA", | ||||
|     "partially_paid": "Parcialmente pagado", | ||||
|     "total": "Total", | ||||
|     "discount": "Descuento", | ||||
|     "sub_total": "Subtotal", | ||||
|     "invoice": "Factura | Facturas", | ||||
|     "invoice_number": "Numero de factura", | ||||
|     "ref_number": "Número de referencia", | ||||
|     "contact": "Contacto", | ||||
|     "add_item": "Agregar un artículo", | ||||
|     "date": "Fecha", | ||||
|     "due_date": "Fecha de vencimiento", | ||||
|     "status": "Estado", | ||||
|     "add_tax": "Agregar impuesto", | ||||
|     "amount": "Cantidad", | ||||
|     "action": "Acción", | ||||
|     "notes": "Notas", | ||||
|     "view": "Ver", | ||||
|     "send_invoice": "Enviará la factura", | ||||
|     "invoice_template": "Plantilla de factura", | ||||
|     "template": "Modelo", | ||||
|     "mark_as_sent": "Marcar como enviado", | ||||
|     "invoice_mark_as_sent": "Esta factura se marcará como enviada", | ||||
|     "confirm_send": "Estas facturas se enviarán por correo electrónico al cliente.", | ||||
|     "invoice_date": "Fecha de la factura", | ||||
|     "record_payment": "Registro de pago", | ||||
|     "add_new_invoice": "Añadir nueva factura", | ||||
|     "update_expense": "Gastos de actualización", | ||||
|     "edit_invoice": "Editar factura", | ||||
|     "new_invoice": "Nueva factura", | ||||
|     "save_invoice": "Guardar factura", | ||||
|     "update_invoice": "Actualizar factura", | ||||
|     "add_new_tax": "Agregar nuevo impuesto", | ||||
|     "no_invoices": "¡Aún no hay facturas!", | ||||
|     "list_of_invoices": "Esta sección contendrá la lista de facturas.", | ||||
|     "select_invoice": "Seleccionar factura", | ||||
|     "mark_as_sent_successfully": "Factura marcada como enviada con éxito", | ||||
|     "send_invoice_successfully": "Factura enviada exitosamente", | ||||
|     "item": { | ||||
|       "title": "Título del artículo", | ||||
|       "description": "Descripción", | ||||
|       "quantity": "Cantidad", | ||||
|       "price": "Precio", | ||||
|       "discount": "Descuento", | ||||
|       "total": "Total", | ||||
|       "total_discount": "Descuento total", | ||||
|       "sub_total": "Subtotal", | ||||
|       "tax": "Impuesto", | ||||
|       "amount": "Cantidad", | ||||
|       "select_an_item": "Escriba o haga clic para seleccionar un elemento", | ||||
|       "type_item_description": "Tipo Elemento Descripción (opcional)" | ||||
|     }, | ||||
|     "payment_attached_message": "Una de las facturas seleccionadas ya tiene un pago adjunto. Asegúrese de eliminar primero los pagos adjuntos para continuar con la eliminación", | ||||
|     "confirm_delete": "No podrá recuperar esta factura | No podrá recuperar estas facturas", | ||||
|     "created_message": "Factura creada exitosamente", | ||||
|     "updated_message": "Factura actualizada exitosamente", | ||||
|     "deleted_message": "Factura eliminada con éxito | Facturas borradas exitosamente", | ||||
|     "marked_as_sent_message": "Factura marcada como enviada con éxito", | ||||
|     "invalid_due_amount_message": "El pago ingresado es mayor que el monto total adeudado por esta factura. Por favor verifique y vuelva a intentar" | ||||
|   }, | ||||
|   "credit_notes": { | ||||
|     "title": "Notas de credito", | ||||
|     "credit_notes_list": "Lista de notas de crédito", | ||||
|     "credit_notes": "Notas de credito", | ||||
|     "contact": "Contacto", | ||||
|     "date": "Fecha", | ||||
|     "amount": "Cantidad", | ||||
|     "action": "Acción", | ||||
|     "credit_number": "Número de crédito", | ||||
|     "notes": "Notas", | ||||
|     "confirm_delete": "¿Desea eliminar esta nota de crédito?", | ||||
|     "item": { | ||||
|       "title": "Título del artículo", | ||||
|       "description": "Descripción", | ||||
|       "quantity": "Cantidad", | ||||
|       "price": "Precio", | ||||
|       "discount": "Descuento", | ||||
|       "total": "Total", | ||||
|       "total_discount": "Descuento total", | ||||
|       "sub_total": "Subtotal", | ||||
|       "tax": "Impuesto" | ||||
|     } | ||||
|   }, | ||||
|   "payments": { | ||||
|     "title": "Pagos", | ||||
|     "payments_list": "Lista de pagos", | ||||
|     "record_payment": "Registro de pago", | ||||
|     "customer": "Cliente", | ||||
|     "date": "Fecha", | ||||
|     "amount": "Cantidad", | ||||
|     "action": "Acción", | ||||
|     "payment_number": "Numero de pago", | ||||
|     "payment_mode": "Modo de pago", | ||||
|     "invoice": "Factura", | ||||
|     "note": "Nota", | ||||
|     "add_payment": "Agregar pago", | ||||
|     "new_payment": "Nuevo pago", | ||||
|     "edit_payment": "Editar pago", | ||||
|     "view_payment": "Ver pago", | ||||
|     "add_new_payment": "Agregar nuevo pago", | ||||
|     "save_payment": "Guardar pago", | ||||
|     "update_payment": "Actualizar pago", | ||||
|     "payment": "Pago | Pagos", | ||||
|     "no_payments": "¡Aún no hay pagos!", | ||||
|     "list_of_payments": "Esta sección contendrá la lista de pagos.", | ||||
|     "select_payment_mode": "Seleccionar modo de pago", | ||||
|  | ||||
|     "confirm_delete": "No podrá recuperar este pago | No podrá recuperar estos pagos", | ||||
|     "created_message": "Pago creado con éxito", | ||||
|     "updated_message": "Pago actualizado con éxito", | ||||
|     "deleted_message": "Pago eliminado con éxito | Pagos eliminados exitosamente", | ||||
|     "invalid_amount_message": "El importe del pago no es válido." | ||||
|   }, | ||||
|   "expenses": { | ||||
|     "title": "Gastos", | ||||
|     "expenses_list": "Lista de gastos", | ||||
|     "expense_title": "Título", | ||||
|     "contact": "Contacto", | ||||
|     "category": "Categoría", | ||||
|     "from_date": "Partir de la fecha", | ||||
|     "to_date": "Hasta la fecha", | ||||
|     "expense_date": "Fecha", | ||||
|     "description": "Descripción", | ||||
|     "receipt": "Recibo", | ||||
|     "amount": "Cantidad", | ||||
|     "action": "Acción", | ||||
|     "note": "Nota", | ||||
|     "category_id": "Categoria ID", | ||||
|     "date": "Fecha de gastos", | ||||
|     "add_expense": "Añadir gastos", | ||||
|     "add_new_expense": "Añadir nuevo gasto", | ||||
|     "save_expense": "Ahorre gastos", | ||||
|     "update_expense": "Gastos de actualización", | ||||
|     "download_receipt": "Descargar recibo", | ||||
|     "edit_expense": "Editar gasto", | ||||
|     "new_expense": "Nuevo gasto", | ||||
|     "expense": "Gastos | Gastos", | ||||
|     "no_expenses": "No hay gastos todavía!", | ||||
|     "list_of_expenses": "Esta sección contendrá la lista de gastos.", | ||||
|  | ||||
|     "confirm_delete": "No podrá recuperar este gasto | No podrá recuperar estos gastos", | ||||
|     "created_message": "Gastos creados exitosamente", | ||||
|     "updated_message": "Gastos actualizados con éxito", | ||||
|     "deleted_message": "Gastos eliminados con éxito | Gastos eliminados exitosamente", | ||||
|     "categories": { | ||||
|       "categories_list": "Lista de categorías", | ||||
|       "title": "Título", | ||||
|       "name": "Nombre", | ||||
|       "description": "Descripción", | ||||
|       "amount": "Cantidad", | ||||
|       "actions": "Comportamiento", | ||||
|       "add_category": "añadir categoría", | ||||
|       "new_category": "Nueva categoría", | ||||
|       "category": "Categoría | Categorias", | ||||
|       "select_a_category": "Seleccione una categoría" | ||||
|     } | ||||
|   }, | ||||
|   "login": { | ||||
|     "email": "Email", | ||||
|     "password": "Contraseña", | ||||
|     "forgot_password": "¿Se te olvidó tu contraseña?", | ||||
|     "or_signIn_with": "o Inicie sesión con", | ||||
|     "login": "Iniciar sesión", | ||||
|     "register": "Registro", | ||||
|     "reset_password": "Restablecer la contraseña", | ||||
|     "enter_email": "Ingrese correo electrónico", | ||||
|     "enter_password": "Introducir la contraseña", | ||||
|     "retype_password": "Retype Password", | ||||
|     "login_placeholder": "mail@example.com" | ||||
|   }, | ||||
|   "reports": { | ||||
|     "title": "Reporte", | ||||
|     "from_date": "Partir de la fecha", | ||||
|     "to_date": "Hasta la fecha", | ||||
|     "status": "Estado", | ||||
|     "paid": "Pagada", | ||||
|     "unpaid": "No pagado", | ||||
|     "download_pdf": "Descargar PDF", | ||||
|     "view_pdf": "Ver PDF", | ||||
|     "update_report": "Informe de actualización", | ||||
|     "report": "Informe | Informes", | ||||
|     "profit_loss": { | ||||
|       "profit_loss": "Pérdida de beneficios", | ||||
|       "to_date": "Hasta la fecha", | ||||
|       "from_date": "Partir de la fecha", | ||||
|       "date_range": "Seleccionar rango de fechas" | ||||
|     }, | ||||
|     "sales": { | ||||
|       "sales": "Ventas", | ||||
|       "date_range": "Seleccionar rango de fechas", | ||||
|       "to_date": "Hasta la fecha", | ||||
|       "from_date": "Partir de la fecha", | ||||
|       "report_type": "Tipo de informe" | ||||
|     }, | ||||
|     "taxes": { | ||||
|       "taxes": "Impuestos", | ||||
|       "to_date": "Hasta la fecha", | ||||
|       "from_date": "Partir de la fecha", | ||||
|       "date_range": "Seleccionar rango de fechas" | ||||
|     }, | ||||
|     "errors": { | ||||
|       "required": "Se requiere campo" | ||||
|     }, | ||||
|     "invoices": { | ||||
|       "invoice": "Factura", | ||||
|       "invoice_date": "Fecha de la factura", | ||||
|       "due_date": "Fecha de vencimiento", | ||||
|       "amount": "Cantidad", | ||||
|       "contact_name": "Nombre de contacto", | ||||
|       "status": "Estado" | ||||
|     }, | ||||
|     "estimates": { | ||||
|       "estimate": "Estimar", | ||||
|       "estimate_date": "Fecha estimada", | ||||
|       "due_date": "Fecha de vencimiento", | ||||
|       "estimate_number": "Numero Estimado", | ||||
|       "ref_number": "Número de referencia", | ||||
|       "amount": "Cantidad", | ||||
|       "contact_name": "Nombre de contacto", | ||||
|       "status": "Estado" | ||||
|     }, | ||||
|     "expenses": { | ||||
|       "expenses": "Gastos", | ||||
|       "category": "Categoría", | ||||
|       "date": "Fecha", | ||||
|       "amount": "Cantidad", | ||||
|       "to_date": "Hasta la fecha", | ||||
|       "from_date": "Partir de la fecha", | ||||
|       "date_range": "Seleccionar rango de fechas" | ||||
|     } | ||||
|   }, | ||||
|   "settings": { | ||||
|     "menu_title": { | ||||
|       "account_settings": "Configuraciones de la cuenta", | ||||
|       "company_information": "Información de la empresa", | ||||
|       "preferences": "Preferencias", | ||||
|       "notifications": "Notificaciones", | ||||
|       "tax_types": "Tipos de impuestos", | ||||
|       "expense_category": "Categorías de gastos", | ||||
|       "update_app": "Actualizar aplicación" | ||||
|     }, | ||||
|     "title": "Configuraciones", | ||||
|     "setting": "Configuraciones | Configuraciones", | ||||
|     "general": "General", | ||||
|     "language": "Idioma", | ||||
|     "primary_currency": "Moneda primaria", | ||||
|     "timezone": "Zona horaria", | ||||
|     "date_format": "Formato de fecha", | ||||
|     "currencies": { | ||||
|       "title": "Monedas", | ||||
|       "currency": "Moneda | Monedas", | ||||
|       "currencies_list": "Lista de monedas", | ||||
|       "select_currency": "Seleccione el tipo de moneda", | ||||
|       "name": "Nombre", | ||||
|       "code": "Código", | ||||
|       "symbol": "Símbolo", | ||||
|       "precision": "Precisión", | ||||
|       "thousand_separator": "Mil separadores", | ||||
|       "decimal_separator": "Separador decimal", | ||||
|       "position": "Posición", | ||||
|       "position_of_symbol": "Posición del símbolo", | ||||
|       "right": "Derecho", | ||||
|       "left": "Izquierda", | ||||
|       "action": "Acción", | ||||
|       "add_currency": "Agregar moneda" | ||||
|     }, | ||||
|     "mail": { | ||||
|       "host": "Host de correo", | ||||
|       "port": "Puerto de correo", | ||||
|       "driver": "Conductor de correo", | ||||
|       "secret": "Secreto", | ||||
|       "password": "Contraseña de correo", | ||||
|       "username": "Nombre de usuario de correo", | ||||
|       "mailgun_secret": "Mailgun Secreto", | ||||
|       "mailgun_domain": "Domino", | ||||
|       "mailgun_endpoint": "Mailgun Punto Final", | ||||
|       "ses_secret": "SES Secreto", | ||||
|       "ses_key": "SES llave", | ||||
|       "from_name": "Del nombre del correo", | ||||
|       "from_mail": "Desde la dirección de correo", | ||||
|       "mail_config": "Configuración de correo", | ||||
|       "encryption": "Cifrado de correo", | ||||
|       "mail_config_desc": "Los detalles a continuación se utilizarán para actualizar el entorno de correo. También puede cambiar los detalles en cualquier momento después de iniciar sesión." | ||||
|     }, | ||||
|     "pdf": { | ||||
|       "title": "Configuración de PDF", | ||||
|       "footer_text": "Texto de pie de página", | ||||
|       "pdf_layout": "Diseño PDF" | ||||
|     }, | ||||
|     "company_info": { | ||||
|       "company_info": "Información de la compañía", | ||||
|       "company_name": "nombre de empresa", | ||||
|       "company_logo": "Logo de la compañía", | ||||
|       "section_description": "Información sobre su empresa que se mostrará en las facturas, estimaciones y otros documentos creados por Crater.", | ||||
|       "phone": "Teléfono", | ||||
|       "country": "País", | ||||
|       "state": "Estado", | ||||
|       "city": "Ciudad", | ||||
|       "address": "Habla a", | ||||
|       "zip": "Código Postal", | ||||
|       "save": "Salvar", | ||||
|       "updated_message": "Información de la empresa actualizada con éxito" | ||||
|     }, | ||||
|     "account_settings": { | ||||
|       "profile_picture": "Foto de perfil", | ||||
|       "name": "Nombre", | ||||
|       "email": "Email", | ||||
|       "password": "Contraseña", | ||||
|       "confirm_password": "Confirmar contraseña", | ||||
|       "account_settings": "Configuraciones de la cuenta", | ||||
|       "save": "Salvar", | ||||
|       "section_description": "Puede actualizar su nombre, correo electrónico y contraseña utilizando el siguiente formulario.", | ||||
|       "updated_message": "Configuración de la cuenta actualizada correctamente" | ||||
|     }, | ||||
|     "user_profile": { | ||||
|       "name": "Nombre", | ||||
|       "email": "Email", | ||||
|       "password": "Contraseña", | ||||
|       "confirm_password": "Confirmar contraseña" | ||||
|     }, | ||||
|     "notification": { | ||||
|       "title": "Notificación", | ||||
|       "email": "Enviar notificaciones a", | ||||
|       "description": "¿Qué notificaciones por correo electrónico le gustaría recibir cuando algo cambia?", | ||||
|       "invoice_viewed": "Factura vista", | ||||
|       "invoice_viewed_desc": "Cuando su cliente ve la factura enviada a través del panel de control del cráter.", | ||||
|       "estimate_viewed": "Estimación vista", | ||||
|       "estimate_viewed_desc": "Cuando su cliente ve la estimación enviada a través del panel de control del cráter.", | ||||
|       "save": "Salvar", | ||||
|       "email_save_message": "Correo electrónico guardado con éxito", | ||||
|       "please_enter_email": "Por favor, introduzca su correo electrónico" | ||||
|     }, | ||||
|     "tax_types": { | ||||
|       "title": "Tipos de impuestos", | ||||
|       "add_tax": "Agregar impuesto", | ||||
|       "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", | ||||
|       "tax_settings": "Configuraciones de impuestos", | ||||
|       "tax_per_item": "Impuesto por artículo", | ||||
|       "tax_name": "Nombre fiscal", | ||||
|       "compound_tax": "Impuesto compuesto", | ||||
|       "percent": "Por ciento", | ||||
|       "action": "Acción", | ||||
|       "tax_setting_description": "Habilítelo si desea agregar impuestos a artículos de factura individuales. Por defecto, los impuestos se agregan directamente a la factura.", | ||||
|       "created_message": "Tipo de impuesto creado con éxito", | ||||
|       "updated_message": "Tipo de impuesto actualizado correctamente", | ||||
|       "deleted_message": "Tipo de impuesto eliminado correctamente", | ||||
|       "confirm_delete": "No podrá recuperar este tipo de impuesto", | ||||
|       "already_in_use": "El impuesto ya está en uso." | ||||
|     }, | ||||
|     "expense_category": { | ||||
|       "title": "Categorías de gastos", | ||||
|       "action": "Acción", | ||||
|       "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", | ||||
|       "category_name": "nombre de la categoría", | ||||
|       "category_description": "Descripción", | ||||
|       "created_message": "Categoría de gastos creada con éxito", | ||||
|       "deleted_message": "Categoría de gastos eliminada correctamente", | ||||
|       "updated_message": "Categoría de gastos actualizada con éxito", | ||||
|       "confirm_delete": "No podrá recuperar esta categoría de gastos", | ||||
|       "already_in_use": "La categoría ya está en uso." | ||||
|     }, | ||||
|     "preferences": { | ||||
|       "currency": "Moneda", | ||||
|       "language": "Idioma", | ||||
|       "time_zone": "Zona horaria", | ||||
|       "fiscal_year": "Año financiero", | ||||
|       "date_format": "Formato de fecha", | ||||
|       "discount_setting": "Ajuste de descuento", | ||||
|       "discount_per_item": "Descuento por artículo", | ||||
|       "discount_setting_description": "Habilítelo si desea agregar Descuento a artículos de factura individuales. Por defecto, los descuentos se agregan directamente a la factura.", | ||||
|       "save": "Salvar", | ||||
|       "preference": "Preferencia | Preferencias", | ||||
|       "general_settings": "Preferencias predeterminadas para el sistema.", | ||||
|       "updated_message": "Preferencias actualizadas exitosamente", | ||||
|       "select_language": "seleccione el idioma", | ||||
|       "select_time_zone": "selecciona la zona horaria", | ||||
|       "select_date_formate": "seleccione formato de fecha", | ||||
|       "select_financial_year": "seleccione año financiero" | ||||
|     }, | ||||
|     "update_app": { | ||||
|       "title": "Actualizar aplicación", | ||||
|       "description": "actualizar la descripción de la aplicación", | ||||
|       "check_update": "Buscar actualizaciones", | ||||
|       "avail_update": "Nueva actualización disponible", | ||||
|       "next_version": "Próxima versión", | ||||
|       "update": "Actualizar", | ||||
|       "update_progress": "Actualización en progreso...", | ||||
|       "progress_text": "Solo tomará unos minutos. No actualice la pantalla ni cierre la ventana antes de que finalice la actualización.", | ||||
|       "update_success": "¡La aplicación ha sido actualizada! Espere mientras la ventana de su navegador se vuelve a cargar automáticamente.", | ||||
|       "latest_message": "¡Actualización no disponible! Estás en la última versión.", | ||||
|       "current_version": "Versión actual" | ||||
|     } | ||||
|   }, | ||||
|   "wizard": { | ||||
|     "account_info": "Información de la cuenta", | ||||
|     "account_info_desc": "Los detalles a continuación se utilizarán para crear la cuenta principal de administrador. También puede cambiar los detalles en cualquier momento después de iniciar sesión.", | ||||
|     "name": "Nombre", | ||||
|     "email": "Email", | ||||
|     "password": "Contraseña", | ||||
|     "confirm_password": "Confirmar contraseña", | ||||
|     "save_cont": "Guardar Continuar", | ||||
|     "company_info": "Información de la empresa", | ||||
|     "company_info_desc": "Esta información se mostrará en las facturas. Tenga en cuenta que puede editar esto más adelante en la página de configuración.", | ||||
|     "company_name": "nombre de empresa", | ||||
|     "company_logo": "Logo de la compañía", | ||||
|     "logo_preview": "Vista previa del logotipo", | ||||
|     "preferences": "Preferencias", | ||||
|     "preferences_desc": "Preferencias predeterminadas para el sistema.", | ||||
|     "country": "País", | ||||
|     "state": "Estado", | ||||
|     "city": "Ciudad", | ||||
|     "address": "Habla a", | ||||
|     "street": "Calle1 | Calle # 2", | ||||
|     "phone": "Teléfono", | ||||
|     "zip_code": "Código postal", | ||||
|     "go_back": "Regresa", | ||||
|     "currency": "Moneda", | ||||
|     "language": "Idioma", | ||||
|     "time_zone": "Zona horaria", | ||||
|     "fiscal_year": "Año financiero", | ||||
|     "date_format": "Formato de fecha", | ||||
|     "from_address": "De la Dirección", | ||||
|     "username": "Nombre de usuario", | ||||
|     "next": "Próximo", | ||||
|     "continue": "Hacer continuación", | ||||
|     "database": { | ||||
|       "database": "URL del sitio y base de datose", | ||||
|       "connection": "Conexión de base de datos", | ||||
|       "host": "Database Host", | ||||
|       "port": "Host de base de datos", | ||||
|       "password": "Contraseña de base de datos", | ||||
|       "app_url": "URL de la aplicación", | ||||
|       "username": "Nombre de usuario de la base de datos", | ||||
|       "db_name": "Nombre de la base de datos", | ||||
|       "desc": "Cree una base de datos en su servidor y establezca las credenciales utilizando el siguiente formulario." | ||||
|     }, | ||||
|     "permissions": { | ||||
|       "permissions": "Permisos", | ||||
|       "permission_confirm_title": "Estás seguro de que quieres continuar?", | ||||
|       "permission_confirm_desc": "Error de verificación de permisos de carpeta", | ||||
|       "permission_desc": "A continuación se muestra la lista de permisos de carpeta necesarios para que la aplicación funcione. Si la verificación de permisos falla, asegúrese de actualizar los permisos de su carpeta." | ||||
|     }, | ||||
|     "mail": { | ||||
|       "host": "Host de correo", | ||||
|       "port": "Puerto de correo", | ||||
|       "driver": "Conductor de correo", | ||||
|       "secret": "Secreto", | ||||
|       "password": "Contraseña de correo", | ||||
|       "username": "Nombre de usuario de correo", | ||||
|       "mailgun_secret": "Mailgun Secreto", | ||||
|       "mailgun_domain": "Domino", | ||||
|       "mailgun_endpoint": "Mailgun Punto Final", | ||||
|       "ses_secret": "SES Secreto", | ||||
|       "ses_key": "SES llave", | ||||
|       "from_name": "Del nombre del correo", | ||||
|       "from_mail": "Desde la dirección de correo", | ||||
|       "mail_config": "Configuración de correo", | ||||
|       "encryption": "Cifrado de correo", | ||||
|       "mail_config_desc": "Los detalles a continuación se utilizarán para actualizar el entorno de correo. También puede cambiar los detalles en cualquier momento después de iniciar sesión." | ||||
|     }, | ||||
|     "req": { | ||||
|       "system_req": "Requisitos del sistema", | ||||
|       "php_req_version": "Php (versión {version} necesario)", | ||||
|       "check_req": "Consultar requisitos", | ||||
|       "system_req_desc": "Crater tiene algunos requisitos de servidor. Asegúrese de que su servidor tenga la versión de php requerida y todas las extensiones mencionadas a continuación." | ||||
|     }, | ||||
|     "errors": { | ||||
|       "migrate_failed": "La migración falló", | ||||
|       "database_variables_save_error": "No se puede conectar a la base de datos con los valores proporcionados.", | ||||
|       "mail_variables_save_error": "La configuración del correo electrónico ha fallado.", | ||||
|       "connection_failed": "Conexión de base de datos fallida" | ||||
|     }, | ||||
|     "success": { | ||||
|       "mail_variables_save_successfully": "Correo electrónico configurado correctamente", | ||||
|       "database_variables_save_successfully": "Base de datos configurada con éxito." | ||||
|     } | ||||
|   }, | ||||
|   "layout_login": { | ||||
|     "copyright_crater": "Copyright @ Crater - 2019", | ||||
|     "super_simple_invoicing": "Facturación super simple", | ||||
|     "for_freelancer": "para autónomos y", | ||||
|     "small_businesses": "Pequeñas empresas", | ||||
|     "crater_help": "Crater te ayuda a rastrear gastos, registrar pagos y generar hermosos", | ||||
|     "invoices_and_estimates": "facturas y presupuestos con capacidad para elegir múltiples plantillas." | ||||
|  | ||||
|   }, | ||||
|   "validation": { | ||||
|     "invalid_url": "URL no válida (por ejemplo, http://www.crater.com)", | ||||
|     "required": "Se requiere campo", | ||||
|     "email_incorrect": "Email incorrecto.", | ||||
|     "email_does_not_exist": " Usuario con correo electrónico dado no existe", | ||||
|     "send_reset_link": "Enviar restablecer enlace", | ||||
|     "not_yet": "¿Aún no? Envialo de nuevo", | ||||
|     "password_min_length": "La contraseña debe contener {count} caracteres", | ||||
|     "name_min_length": "El nombre debe tener al menos {count} letras.", | ||||
|     "enter_valid_tax_rate": "Ingrese una tasa impositiva válida", | ||||
|     "numbers_only": "Solo numeros.", | ||||
|     "characters_only": "Solo personajes.", | ||||
|     "password_incorrect": "Las contraseñas deben ser idénticas", | ||||
|     "password_length": "La contraseña debe tener 5 caracteres de longitud.", | ||||
|     "qty_must_greater_than_zero": "La cantidad debe ser mayor que cero.", | ||||
|     "price_greater_than_zero": "El precio debe ser mayor que cero.", | ||||
|     "payment_greater_than_zero": "El pago debe ser mayor que cero.", | ||||
|     "payment_greater_than_due_amount": "El pago ingresado es mayor al monto adeudado de esta factura.", | ||||
|     "quantity_maxlength": "La cantidad no debe ser mayor de 20 dígitos.", | ||||
|     "price_maxlength": "El precio no debe ser mayor de 20 dígitos.", | ||||
|     "price_minvalue": "El precio debe ser mayor que 0 dígitos", | ||||
|     "amount_maxlength": "La cantidad no debe ser mayor de 20 dígitos.", | ||||
|     "amount_minvalue": "La cantidad debe ser mayor que 0 dígitos", | ||||
|     "description_maxlength": "La descripción no debe tener más de 255 caracteres.", | ||||
|     "maximum_options_error": "Máximo de {max} opciones seleccionadas. Primero elimine una opción seleccionada para seleccionar otra.", | ||||
|     "notes_maxlength": "Las notas no deben tener más de 255 caracteres.", | ||||
|     "address_maxlength": "La dirección no debe tener más de 255 caracteres.", | ||||
|     "ref_number_maxlength": "El número de referencia no debe tener más de 255 caracteres." | ||||
|   } | ||||
| } | ||||
| @ -1,815 +0,0 @@ | ||||
| export default { | ||||
|   navigation: { | ||||
|     // key : 'singular | plural' | ||||
|     dashboard: 'Tableau de bord', | ||||
|     customers: 'Cliente', | ||||
|     items: 'Articles', | ||||
|     invoices: 'Factures', | ||||
|     expenses: 'Les dépenses', | ||||
|     estimates: 'Estimations', | ||||
|     payments: 'Paiements', | ||||
|     reports: 'Rapports', | ||||
|     settings: 'Paramètres', | ||||
|     logout: 'Se déconnecter' | ||||
|   }, | ||||
|   general: { | ||||
|     view_pdf: 'Voir PDF', | ||||
|     download_pdf: 'Télécharger le PDF', | ||||
|     save: 'sauver', | ||||
|     cancel: 'Annuler', | ||||
|     update: 'Mise à jour', | ||||
|     download: 'Télécharger', | ||||
|     from_date: 'Partir de la date', | ||||
|     to_date: 'À ce jour', | ||||
|     from: 'De', | ||||
|     to: 'À', | ||||
|     go_back: 'Retourner', | ||||
|     back_to_login: 'Retour connexion?', | ||||
|     home: 'Accueil', | ||||
|     filter: 'Filtre', | ||||
|     delete: 'Effacer', | ||||
|     edit: 'Modifier', | ||||
|     view: 'Vue', | ||||
|     add_new_item: 'Ajoute un nouvel objet', | ||||
|     clear_all: 'Tout effacer', | ||||
|     showing: 'Montrant', | ||||
|     of: 'de', | ||||
|     actions: 'Actions', | ||||
|     subtotal: 'TOTAL', | ||||
|     discount: 'REMISE', | ||||
|     fixed: 'Fixée', | ||||
|     percentage: 'Pourcentage', | ||||
|     tax: 'IMPÔT', | ||||
|     total_amount: 'MONTANT TOTAL', | ||||
|     bill_to: 'facturer', | ||||
|     ship_to: 'Envoyez à', | ||||
|     due: 'Dû', | ||||
|     draft: 'Brouillon', | ||||
|     sent: 'Envoyée', | ||||
|     all: 'Tout', | ||||
|     select_all: 'Tout sélectionner', | ||||
|     choose_file: 'Cliquez ici pour choisir un fichier', | ||||
|     choose_template: 'Choisissez un modèle', | ||||
|     choose: 'Choisir', | ||||
|     remove: 'Retirer', | ||||
|     powered_by: 'Alimenté par', | ||||
|     bytefury: 'Bytefury', | ||||
|     select_a_status: 'Sélectionnez un statut', | ||||
|     select_a_tax: 'Sélectionnez une taxe', | ||||
|     search: 'Chercher', | ||||
|     are_you_sure: 'Êtes-vous sûr?', | ||||
|     list_is_empty: 'La liste est vide', | ||||
|     no_tax_found: 'Aucune taxe trouvée!', | ||||
|     four_zero_four: '404', | ||||
|     you_got_lost: 'Oups! Vous vous êtes perdus!', | ||||
|     go_home: 'Rentrer chez soi', | ||||
|  | ||||
|     setting_updated: 'Réglage mis à jour avec succès', | ||||
|     select_state: "Sélectionnez l'état", | ||||
|     select_country: 'Choisissez le pays', | ||||
|     select_city: 'Sélectionnez une ville', | ||||
|     street_1: 'Rue 1', | ||||
|     street_2: 'Rue # 2', | ||||
|     action_failed: 'Action: échoué' | ||||
|   }, | ||||
|   dashboard: { | ||||
|     select_year: 'Sélectionnez lannée', | ||||
|     cards: { | ||||
|       due_amount: 'Montant dû', | ||||
|       customers: 'Les clients', | ||||
|       invoices: 'Factures', | ||||
|       estimates: 'Estimations' | ||||
|     }, | ||||
|     chart_info: { | ||||
|       total_sales: 'Ventes', | ||||
|       total_receipts: 'Reçus', | ||||
|       total_expense: 'Les dépenses', | ||||
|       net_income: 'Revenu net', | ||||
|       year: 'Sélectionnez lannée' | ||||
|     }, | ||||
|     weekly_invoices: { | ||||
|       title: 'Factures hebdomadaires' | ||||
|     }, | ||||
|     monthly_chart: { | ||||
|       title: 'Ventes et dépenses' | ||||
|     }, | ||||
|     recent_invoices_card: { | ||||
|       title: 'Factures dues', | ||||
|       due_on: 'Due On', | ||||
|       customer: 'Cliente', | ||||
|       amount_due: 'Montant dû', | ||||
|       actions: 'Actions', | ||||
|       view_all: 'Voir tout' | ||||
|     }, | ||||
|     recent_estimate_card: { | ||||
|       title: 'Estimations récentes', | ||||
|       date: 'Date', | ||||
|       customer: 'Cliente', | ||||
|       amount_due: 'Montant dû', | ||||
|       actions: 'Actions', | ||||
|       view_all: 'Voir tout' | ||||
|     } | ||||
|   }, | ||||
|   tax_types: { | ||||
|     name: 'Nom', | ||||
|     description: 'La description', | ||||
|     percent: 'Pour cent', | ||||
|     compound_tax: 'Taxe composée' | ||||
|   }, | ||||
|   customers: { | ||||
|     title: 'Les clients', | ||||
|     add_customer: 'Ajouter un client', | ||||
|     contacts_list: 'Liste de clients', | ||||
|     name: 'Nom', | ||||
|     display_name: 'Afficher un nom', | ||||
|     primary_contact_name: 'Nom du contact principal', | ||||
|     contact_name: 'Nom du contact', | ||||
|     amount_due: 'Montant dû', | ||||
|     email: 'Email', | ||||
|     address: 'Adresse', | ||||
|     phone: 'Téléphone', | ||||
|     website: 'Site Internet', | ||||
|     country: 'Pays', | ||||
|     state: 'Etat', | ||||
|     city: 'Ville', | ||||
|     zip_code: 'Code postal', | ||||
|     added_on: 'Ajouté le', | ||||
|     action: 'action', | ||||
|     password: 'Mot de passe', | ||||
|     street_number: 'Numéro de rue', | ||||
|     primary_currency: 'Devise principale', | ||||
|     add_new_customer: 'Ajouter un nouveau client', | ||||
|     save_customer: 'Enregistrer le client', | ||||
|     update_customer: 'Mettre à jour le client', | ||||
|     customer: 'Client | Les clients', | ||||
|     new_customer: 'Nouveau client', | ||||
|     edit_customer: 'Modifier le client', | ||||
|     basic_info: 'Informations de base', | ||||
|     billing_address: 'Adresse de facturation', | ||||
|     shipping_address: 'Adresse de livraison', | ||||
|     copy_billing_address: 'Copier de la facturation', | ||||
|     no_customers: 'Pas encore de clients!', | ||||
|     no_customers_found: 'Aucun client trouvé!', | ||||
|     list_of_customers: 'Cette section contiendra la liste des clients.', | ||||
|     primary_display_name: 'Nom daffichage principal', | ||||
|     select_state: 'Sélectionnez létat', | ||||
|     select_country: 'Choisissez le pays', | ||||
|     select_city: 'Sélectionnez une ville', | ||||
|     select_currency: 'Sélectionnez la devise', | ||||
|     street_1: 'Rue 1', | ||||
|     street_2: 'Rue 2', | ||||
|     select_a_customer: 'Sélectionnez un client', | ||||
|     type_or_click: 'Tapez ou cliquez pour sélectionner', | ||||
|  | ||||
|     confirm_delete: 'Vous ne pourrez pas récupérer ce client | Vous ne pourrez pas récupérer ces clients', | ||||
|     created_message: 'Client créé avec succès', | ||||
|     updated_message: 'Client mis à jour avec succès', | ||||
|     deleted_message: 'Client supprimé avec succès | Les clients supprimés avec succès' | ||||
|   }, | ||||
|   items: { | ||||
|     title: 'Articles', | ||||
|     items_list: 'Liste darticles', | ||||
|     name: 'Nom', | ||||
|     unit: 'Unité', | ||||
|     description: 'La description', | ||||
|     added_on: 'Ajouté le', | ||||
|     price: 'Prix', | ||||
|     date_of_creation: 'Date de création', | ||||
|     action: 'action', | ||||
|     add_item: 'Ajouter un item', | ||||
|     save_item: 'Enregistrer lélément', | ||||
|     update_item: 'Mettre à jour lélément', | ||||
|     item: 'Article | Articles', | ||||
|     add_new_item: 'Ajoute un nouvel objet', | ||||
|     new_item: 'Nouvel article', | ||||
|     edit_item: 'Modifier larticle', | ||||
|     no_items: 'Aucun article pour le moment!', | ||||
|     list_of_items: 'Cette section contiendra la liste des éléments.', | ||||
|     select_a_unit: 'sélectionner lunité', | ||||
|  | ||||
|     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', | ||||
|     created_message: 'Article créé avec succès', | ||||
|     updated_message: 'Élément mis à jour avec succès', | ||||
|     deleted_message: 'Élément supprimé avec succès | Éléments supprimés avec succès' | ||||
|   }, | ||||
|   estimates: { | ||||
|     title: 'Estimations', | ||||
|     estimate: 'Estimation | Estimations', | ||||
|     estimates_list: 'Liste des estimations', | ||||
|     days: '{jours} jours', | ||||
|     months: '{mois} mois', | ||||
|     years: '{années} Année', | ||||
|     all: 'Toute', | ||||
|     paid: 'Payé', | ||||
|     unpaid: 'Non payé', | ||||
|     customer: 'CLIENTE CLIENT', | ||||
|     ref_no: 'REF NO.', | ||||
|     number: 'NOMBRE', | ||||
|     amount_due: 'MONTANT DÛ', | ||||
|     partially_paid: 'Partiellement payé', | ||||
|     total: 'Totale', | ||||
|     discount: 'Remise', | ||||
|     sub_total: 'Total partiel', | ||||
|     estimate_number: 'Numéro destimation', | ||||
|     ref_number: 'Numéro de ref', | ||||
|     contact: 'Contact', | ||||
|     add_item: 'Ajouter un article', | ||||
|     date: 'Date', | ||||
|     due_date: 'Date déchéance', | ||||
|     expiry_date: 'Date dexpiration', | ||||
|     status: 'Statut', | ||||
|     add_tax: 'Ajouter une taxe', | ||||
|     amount: 'Montante', | ||||
|     action: 'action', | ||||
|     notes: 'Remarques', | ||||
|     tax: 'Impôt', | ||||
|     estimate_template: 'Modèle destimation', | ||||
|     convert_to_invoice: 'Convertir en facture', | ||||
|     mark_as_sent: 'Marquer comme envoyé', | ||||
|     send_estimate: 'Envoyer une estimation', | ||||
|     record_payment: 'Record de paiement', | ||||
|     add_estimate: 'Ajouter une estimation', | ||||
|     save_estimate: 'Sauvegarder lestimation', | ||||
|     confirm_conversion: 'Vous souhaitez convertir cette estimation en facture?', | ||||
|     conversion_message: 'Conversion réussie', | ||||
|     confirm_send_estimate: 'Cette estimation sera envoyée par courrier électronique au client.', | ||||
|     confirm_mark_as_sent: 'Cette estimation sera marquée comme envoyé', | ||||
|     confirm_mark_as_accepted: 'Cette estimation sera marquée comme acceptée', | ||||
|     confirm_mark_as_rejected: 'Cette estimation sera marquée comme Rejetée', | ||||
|     mark_as_sent_successfully: 'Estimation marquée comme envoyée avec succès', | ||||
|     send_estimate_successfully: 'Estimation envoyée avec succès', | ||||
|     errors: { | ||||
|       required: 'Champ requis' | ||||
|     }, | ||||
|     accepted: 'Accepté', | ||||
|     sent: 'Envoyée', | ||||
|     draft: 'Brouillon', | ||||
|     declined: 'Diminué', | ||||
|     new_estimate: 'Nouvelle estimation', | ||||
|     add_new_estimate: 'Ajouter une nouvelle estimation', | ||||
|     update_Estimate: 'Mise à jour de lestimation', | ||||
|     edit_estimate: 'Modifier lestimation', | ||||
|     items: 'articles', | ||||
|     Estimate: 'Estimation | Estimations', | ||||
|     add_new_tax: 'Ajouter une nouvelle taxe', | ||||
|     no_estimates: 'Aucune estimation pour le moment!', | ||||
|     list_of_estimates: 'Cette section contiendra la liste des estimations.', | ||||
|     mark_as_rejected: 'Marquer comme rejeté', | ||||
|     mark_as_accepted: 'Marquer comme accepté', | ||||
|  | ||||
|     marked_as_accepted_message: 'Estimation marquée comme acceptée', | ||||
|     marked_as_rejected_message: 'Estimation marquée comme rejetée', | ||||
|     confirm_delete: 'Vous ne pourrez pas récupérer cette estimation | Vous ne pourrez pas récupérer ces estimations', | ||||
|     created_message: 'Estimation créée avec succès', | ||||
|     updated_message: 'Estimation mise à jour avec succès', | ||||
|     deleted_message: 'Estimation supprimée avec succès | Estimations supprimées avec succès', | ||||
|     item: { | ||||
|       title: 'Titre de larticle', | ||||
|       description: 'La description', | ||||
|       quantity: 'Quantité', | ||||
|       price: 'Prix', | ||||
|       discount: 'Remise', | ||||
|       total: 'Totale', | ||||
|       total_discount: 'Remise totale', | ||||
|       sub_total: 'Total partiel', | ||||
|       tax: 'Impôt', | ||||
|       amount: 'Montante', | ||||
|       select_an_item: 'Tapez ou cliquez pour sélectionner un élément', | ||||
|       type_item_description: 'Type Item Description (optionnel)' | ||||
|     } | ||||
|   }, | ||||
|   invoices: { | ||||
|     title: 'Factures', | ||||
|     invoices_list: 'Liste de factures', | ||||
|     days: '{jours} jours', | ||||
|     months: '{mois} mois', | ||||
|     years: '{années} Année', | ||||
|     all: 'Toute', | ||||
|     paid: 'Payé', | ||||
|     unpaid: 'Non payé', | ||||
|     customer: 'CLIENTE CLIENT', | ||||
|     paid_status: 'Statut payé', | ||||
|     ref_no: 'REF NO.', | ||||
|     number: 'NOMBRE', | ||||
|     amount_due: 'MONTANT DÛ', | ||||
|     partially_paid: 'Partiellement payé', | ||||
|     total: 'Totale Total', | ||||
|     discount: 'Remise', | ||||
|     sub_total: 'Total partiel', | ||||
|     invoice: 'Facture | Factures', | ||||
|     invoice_number: 'Numéro de facture', | ||||
|     ref_number: 'Numéro de ref', | ||||
|     contact: 'Contact', | ||||
|     add_item: 'Ajouter un article', | ||||
|     date: 'Date', | ||||
|     due_date: 'Date déchéance', | ||||
|     status: 'Statut', | ||||
|     add_tax: 'Ajouter une taxe', | ||||
|     amount: 'Montante Montant', | ||||
|     action: 'action', | ||||
|     notes: 'Remarques', | ||||
|     view: 'Vue', | ||||
|     send_invoice: 'Envoyer une facture', | ||||
|     invoice_template: 'Modèle de facture', | ||||
|     template: 'Modèle', | ||||
|     mark_as_sent: 'Marquer comme envoyé', | ||||
|     invoice_mark_as_sent: 'Cette facture sera marquée comme envoyé', | ||||
|     confirm_send: 'Cette facture sera envoyée par courrier électronique au client.', | ||||
|     invoice_date: 'Date de facturation', | ||||
|     record_payment: 'Record de paiement', | ||||
|     add_new_invoice: 'Ajouter une nouvelle facture', | ||||
|     update_expense: 'Frais de mise à jour', | ||||
|     edit_invoice: 'Modifier la facture', | ||||
|     new_invoice: 'Nouvelle facture', | ||||
|     save_invoice: 'Enregistrer la facture', | ||||
|     update_invoice: 'Mettre à jour la facture', | ||||
|     add_new_tax: 'Ajouter une nouvelle taxe', | ||||
|     no_invoices: 'Aucune facture pour le moment!', | ||||
|     list_of_invoices: 'Cette section contiendra la liste des factures.', | ||||
|     select_invoice: 'Sélectionnez facture', | ||||
|     mark_as_sent_successfully: 'Facture marquée comme envoyée avec succès', | ||||
|     send_invoice_successfully: 'Facture envoyée avec succès', | ||||
|     item: { | ||||
|       title: 'Titre de larticle', | ||||
|       description: 'La description', | ||||
|       quantity: 'Quantité', | ||||
|       price: 'Prix', | ||||
|       discount: 'Remise', | ||||
|       total: 'Totale Total', | ||||
|       total_discount: 'Remise totale', | ||||
|       sub_total: 'Total partiel', | ||||
|       tax: 'Impôt', | ||||
|       amount: 'Montante Montant', | ||||
|       select_an_item: 'Tapez ou cliquez pour sélectionner un élément', | ||||
|       type_item_description: 'Type Item Description (optionnel)' | ||||
|     }, | ||||
|     payment_attached_message: "Un paiement est déjà associé à l'une des factures sélectionnées. Assurez-vous d’effacer d’abord les paiements en pièce jointe afin de procéder à la suppression.", | ||||
|     confirm_delete: 'Vous ne pourrez pas récupérer cette facture | Vous ne pourrez pas récupérer ces factures', | ||||
|     created_message: 'Facture créée avec succès', | ||||
|     updated_message: 'Facture mise à jour avec succès', | ||||
|     deleted_message: 'Invoice deleted successfully | Invoices deleted successfully', | ||||
|     marked_as_sent_message: 'Facture supprimée avec succès | Factures supprimées avec succès', | ||||
|     invalid_due_amount_message: 'Le paiement entré est supérieur au montant total dû pour cette facture. Veuillez vérifier et réessayer' | ||||
|   }, | ||||
|   credit_notes: { | ||||
|     title: 'Notes de crédit', | ||||
|     credit_notes_list: 'Liste des notes de crédit', | ||||
|     // Fields | ||||
|     credit_notes: 'Notes de crédit', | ||||
|     contact: 'Contact', | ||||
|     date: 'Date', | ||||
|     amount: 'Montante Montant', | ||||
|     action: 'action', | ||||
|     credit_number: 'Numéro de crédit', | ||||
|     notes: 'Remarques', | ||||
|     confirm_delete: 'Voulez-vous supprimer cet avoir?', | ||||
|     item: { | ||||
|       title: 'Titre de larticle', | ||||
|       description: 'La description', | ||||
|       quantity: 'Quantité', | ||||
|       price: 'Prix', | ||||
|       discount: 'Remise', | ||||
|       total: 'Totale Total', | ||||
|       total_discount: 'Remise totale', | ||||
|       sub_total: 'Total partiel', | ||||
|       tax: 'Impôt' | ||||
|     } | ||||
|   }, | ||||
|   payments: { | ||||
|     title: 'Paiements', | ||||
|     payments_list: 'Liste de paiements', | ||||
|     record_payment: 'Record de paiement', | ||||
|     // Fields | ||||
|     customer: 'Cliente Client', | ||||
|     date: 'Date', | ||||
|     amount: 'Montante Montant', | ||||
|     action: 'action', | ||||
|     payment_number: 'Numéro de paiement', | ||||
|     payment_mode: 'Mode de paiement', | ||||
|     invoice: 'Facture dachat', | ||||
|     note: 'Remarque', | ||||
|     add_payment: 'Ajouter un paiement', | ||||
|     new_payment: 'Nouveau paiement', | ||||
|     edit_payment: 'Modifier le paiement', | ||||
|     view_payment: 'Voir le paiement', | ||||
|     add_new_payment: 'Ajouter un nouveau paiement', | ||||
|     save_payment: 'Enregistrer le paiement', | ||||
|     update_payment: 'Mettre à jour le paiement', | ||||
|     payment: 'Paiement | Paiements', | ||||
|     no_payments: 'Aucun paiement pour le moment!', | ||||
|     list_of_payments: 'Cette section contiendra la liste des paiements', | ||||
|     select_payment_mode: 'Sélectionnez le mode de paiement', | ||||
|  | ||||
|     confirm_delete: 'Vous ne pourrez pas récupérer ce paiement | Vous ne pourrez pas récupérer ces paiements', | ||||
|     created_message: 'Paiement créé avec succès', | ||||
|     updated_message: 'Paiement mis à jour avec succès', | ||||
|     deleted_message: 'Paiement supprimé avec succès | Paiements supprimés avec succès', | ||||
|     invalid_amount_message: 'Le montant du paiement est invalide' | ||||
|   }, | ||||
|   expenses: { | ||||
|     title: 'Les dépenses', | ||||
|     expenses_list: 'Liste des dépenses', | ||||
|     // Fields | ||||
|     expense_title: 'Titre', | ||||
|     contact: 'Contact', | ||||
|     category: 'Catégorie', | ||||
|     from_date: 'Partir de la date', | ||||
|     to_date: 'À ce jour', | ||||
|     expense_date: 'Date', | ||||
|     description: 'La description', | ||||
|     receipt: 'Le reçu', | ||||
|     amount: 'Montante Montant', | ||||
|     action: 'action', | ||||
|     note: 'Remarque', | ||||
|     category_id: 'Identifiant de catégorie', | ||||
|     date: 'Date de dépense', | ||||
|     add_expense: 'Ajouter une dépense', | ||||
|     add_new_expense: 'Ajouter une nouvelle dépense', | ||||
|     save_expense: 'Économiser des dépenses', | ||||
|     update_expense: 'Frais de mise à jour', | ||||
|     download_receipt: 'Télécharger le reçu', | ||||
|     edit_expense: 'Modifier les dépenses', | ||||
|     new_expense: 'Nouvelle dépense', | ||||
|     expense: 'Frais | Les dépenses', | ||||
|     no_expenses: 'Pas de dépenses pour le moment!', | ||||
|     list_of_expenses: 'Cette section contiendra la liste des dépenses.', | ||||
|  | ||||
|     confirm_delete: 'Vous ne pourrez pas récupérer cette dépense | Vous ne pourrez pas récupérer ces frais', | ||||
|     created_message: 'Dépense créée avec succès', | ||||
|     updated_message: 'Dépense mise à jour avec succès', | ||||
|     deleted_message: 'Dépense supprimée avec succès | Dépenses supprimées avec succès', | ||||
|     categories: { | ||||
|       categories_list: 'Liste des catégories', | ||||
|       title: 'Titre', | ||||
|       name: 'Nom', | ||||
|       description: 'La description', | ||||
|       amount: 'Montante Montant', | ||||
|       actions: 'Actions', | ||||
|       add_category: 'ajouter une catégorie', | ||||
|       new_category: 'Nouvelle catégorie', | ||||
|       category: 'Catégorie | Les catégories', | ||||
|       select_a_category: 'choisissez une catégorie' | ||||
|     } | ||||
|   }, | ||||
|   login: { | ||||
|     email: 'Email', | ||||
|     password: 'Mot de passe', | ||||
|     forgot_password: 'Mot de passe oublié?', | ||||
|     or_signIn_with: 'ou Connectez-vous avec:', | ||||
|     login: 'Sidentifier', | ||||
|     register: 'Sinscrire', | ||||
|     reset_password: 'réinitialiser le mot de passe', | ||||
|     enter_email: 'Entrer email', | ||||
|     enter_password: 'Entrer le mot de passe', | ||||
|     retype_password: 'Retaper le mot de passe', | ||||
|     login_placeholder: 'mail@example.com' | ||||
|   }, | ||||
|   reports: { | ||||
|     title: 'rapport', | ||||
|     from_date: 'Partir de la date', | ||||
|     to_date: 'À ce jour', | ||||
|     status: 'Statut', | ||||
|     paid: 'Payé', | ||||
|     unpaid: 'Non payé', | ||||
|     download_pdf: 'Télécharger le PDF', | ||||
|     view_pdf: 'Voir PDF', | ||||
|     update_report: 'Rapport de mise à jour', | ||||
|     report: 'Rapport | Rapports', | ||||
|     profit_loss: { | ||||
|       profit_loss: 'Perte de profit', | ||||
|       to_date: 'À ce jour', | ||||
|       from_date: 'Partir de la date', | ||||
|       date_range: 'Sélectionner une plage de dates' | ||||
|     }, | ||||
|     sales: { | ||||
|       sales: 'Ventes', | ||||
|       date_range: 'Sélectionner une plage de dates', | ||||
|       to_date: 'À ce jour', | ||||
|       from_date: 'Partir de la date', | ||||
|       report_type: 'Type de rapport' | ||||
|     }, | ||||
|     taxes: { | ||||
|       taxes: 'Les taxes', | ||||
|       to_date: 'À ce jour', | ||||
|       from_date: 'Partir de la date', | ||||
|       date_range: 'Sélectionner une plage de dates' | ||||
|     }, | ||||
|     errors: { | ||||
|       required: 'Champ requis' | ||||
|     }, | ||||
|     invoices: { | ||||
|       invoice: 'Facture dachat', | ||||
|       invoice_date: 'Date de facturation', | ||||
|       due_date: 'Date déchéance', | ||||
|       amount: 'Montante ', | ||||
|       contact_name: 'Nom du contact', | ||||
|       status: 'Statut' | ||||
|     }, | ||||
|     estimates: { | ||||
|       estimate: 'Estimation', | ||||
|       estimate_date: 'Date destimation', | ||||
|       due_date: 'Date déchéance', | ||||
|       estimate_number: 'Numéro destimation', | ||||
|       ref_number: 'Numéro de ref', | ||||
|       amount: 'Montante', | ||||
|       contact_name: 'Nom du contact', | ||||
|       status: 'Statut' | ||||
|     }, | ||||
|     expenses: { | ||||
|       expenses: 'Les dépenses', | ||||
|       category: 'Catégorie', | ||||
|       date: 'Date', | ||||
|       amount: 'Montante', | ||||
|       to_date: 'À ce jour', | ||||
|       from_date: 'Partir de la date', | ||||
|       date_range: 'Sélectionner une plage de dates' | ||||
|     } | ||||
|   }, | ||||
|   settings: { | ||||
|     menu_title: { | ||||
|       account_settings: 'Paramètres du compte', | ||||
|       company_information: 'Informations sur la société', | ||||
|       preferences: 'Préférences', | ||||
|       notifications: 'Les notifications', | ||||
|       tax_types: 'Types de taxe', | ||||
|       expense_category: 'Catégories de dépenses', | ||||
|       update_app: "Mise à jour de l'application" | ||||
|     }, | ||||
|     title: 'Paramètres', | ||||
|     setting: 'Paramètres | Paramètres', | ||||
|     general: 'Générale', | ||||
|     language: 'La langue', | ||||
|     primary_currency: 'Devise principale', | ||||
|     timezone: 'Fuseau horaire', | ||||
|     date_format: 'Format de date', | ||||
|     currencies: { | ||||
|       title: 'Monnaies', | ||||
|       currency: 'Monnaie | Monnaies', | ||||
|       currencies_list: 'Liste des devises', | ||||
|       select_currency: 'Sélectionnez la devise', | ||||
|       name: 'Nom', | ||||
|       code: 'Code', | ||||
|       symbol: 'symbole', | ||||
|       precision: 'Précision', | ||||
|       thousand_separator: 'Mille séparateur', | ||||
|       decimal_separator: 'Séparateur décimal', | ||||
|       position: 'Position', | ||||
|       position_of_symbol: 'Position du symbole', | ||||
|       right: 'Droite', | ||||
|       left: 'La gauche', | ||||
|       action: 'action', | ||||
|       add_currency: 'Ajouter une devise' | ||||
|     }, | ||||
|     mail: { | ||||
|       host: 'Mail Host', | ||||
|       port: 'Port mail', | ||||
|       driver: 'Pilote de courrier', | ||||
|       password: 'Mot de passe mail', | ||||
|       secret: 'Secret', | ||||
|       mailgun_secret: 'Mailgun Secret', | ||||
|       mailgun_domain: 'Domaine', | ||||
|       mailgun_endpoint: 'Mailgun Point Final', | ||||
|       ses_secret: 'SES Secret', | ||||
|       ses_key: 'SES clé', | ||||
|       from_name: 'Nom de messagerie', | ||||
|       from_mail: 'De ladresse mail', | ||||
|       username: "Mail Nom d'utilisateur", | ||||
|       mail_config: 'Configuration du courrier', | ||||
|       encryption: 'Chiffrement du courrier', | ||||
|       mail_config_desc: "Les détails ci-dessous seront utilisés pour mettre à jour l'environnement de messagerie. Aussi, vous pouvez modifier les détails à tout moment après la connexion." | ||||
|     }, | ||||
|     pdf: { | ||||
|       title: 'Paramètre PDF', | ||||
|       footer_text: 'Pied de page texte', | ||||
|       pdf_layout: 'Mise en page PDF' | ||||
|     }, | ||||
|     company_info: { | ||||
|       company_info: 'Information dentreprise', | ||||
|       company_name: 'Nom de la compagnie', | ||||
|       company_logo: 'Logo dentreprise', | ||||
|       section_description: 'Informations sur votre entreprise qui figureront sur les factures, estimations et autres documents créés par Crater.', | ||||
|       phone: 'Téléphone', | ||||
|       country: 'Pays', | ||||
|       state: 'Etat', | ||||
|       city: 'Ville', | ||||
|       address: 'Adresse', | ||||
|       zip: 'Zip *: français', | ||||
|       save: 'sauver', | ||||
|       updated_message: 'Informations sur la société mises à jour avec succès' | ||||
|     }, | ||||
|     account_settings: { | ||||
|       name: 'Nom', | ||||
|       email: 'Email', | ||||
|       password: 'Mot de passe', | ||||
|       confirm_password: 'Confirmez le mot de passe', | ||||
|       account_settings: 'Paramètres du compte', | ||||
|       save: 'sauver', | ||||
|       section_description: 'Vous pouvez mettre à jour votre nom, votre email et votre mot de passe en utilisant le formulaire ci-dessous.', | ||||
|       updated_message: 'Paramètres du compte mis à jour avec succès' | ||||
|     }, | ||||
|     user_profile: { | ||||
|       name: 'Nom', | ||||
|       email: 'Email', | ||||
|       password: 'Mot de passe', | ||||
|       confirm_password: 'Confirmez le mot de passe' | ||||
|     }, | ||||
|     notification: { | ||||
|       title: 'Notification', | ||||
|       email: 'Envoyer des notifications à', | ||||
|       description: 'Quelles notifications par courrier électronique souhaitez-vous recevoir lorsque quelque chose change?', | ||||
|       invoice_viewed: 'Facture consultée', | ||||
|       invoice_viewed_desc: 'Lorsque votre client visualise la facture envoyée via le tableau de bord du cratère.', | ||||
|       estimate_viewed: 'Estimation vue', | ||||
|       estimate_viewed_desc: 'Lorsque votre client visualise le devis envoyé via le tableau de bord du cratère.', | ||||
|       save: 'sauver', | ||||
|       email_save_message: 'Email enregistré avec succès', | ||||
|       invoice_viewed_message: 'Facture consultée', | ||||
|       estimate_viewed_message: 'Estimation vue', | ||||
|       please_enter_email: 'S il vous plaît entrer email' | ||||
|     }, | ||||
|     tax_types: { | ||||
|       title: 'Types de taxe', | ||||
|       add_tax: 'Ajouter une 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.', | ||||
|       add_new_tax: 'Ajouter une nouvelle taxe', | ||||
|       tax_settings: 'Paramètres de taxe', | ||||
|       tax_per_item: 'Taxe par article', | ||||
|       tax_name: 'Nom de la taxe', | ||||
|       compound_tax: 'Taxe composée', | ||||
|       percent: 'Pour cent', | ||||
|       action: 'action', | ||||
|       tax_setting_description: 'Activez cette option si vous souhaitez ajouter des taxes à des postes de facture individuels. Par défaut, les taxes sont ajoutées directement à la facture.', | ||||
|       created_message: 'Type de taxe créé avec succès', | ||||
|       updated_message: 'Type de taxe mis à jour avec succès', | ||||
|       deleted_message: 'Type de taxe supprimé avec succès', | ||||
|       confirm_delete: 'Vous ne pourrez pas récupérer ce type de taxe', | ||||
|       already_in_use: 'La taxe est déjà utilisée' | ||||
|     }, | ||||
|     expense_category: { | ||||
|       title: 'Catégories de dépenses', | ||||
|       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.', | ||||
|       add_new_category: 'Ajouter une nouvelle catégorie', | ||||
|       category_name: 'Nom de catégorie', | ||||
|       category_description: 'La description', | ||||
|       created_message: 'Catégorie de dépenses créée avec succès', | ||||
|       deleted_message: 'La catégorie de dépenses a été supprimée avec succès', | ||||
|       updated_message: 'Catégorie de dépenses mise à jour avec succès', | ||||
|       confirm_delete: 'Vous ne pourrez pas récupérer cette catégorie de dépenses', | ||||
|       already_in_use: 'La catégorie est déjà utilisée' | ||||
|     }, | ||||
|     preferences: { | ||||
|       currency: 'Devise', | ||||
|       language: 'La langue', | ||||
|       time_zone: 'Fuseau horaire', | ||||
|       fiscal_year: 'Année financière', | ||||
|       date_format: 'Format de date', | ||||
|       discount_setting: 'Réglage de remise', | ||||
|       discount_per_item: 'Remise par article', | ||||
|       discount_setting_description: 'Activez cette option si vous souhaitez ajouter une remise à des postes de facture individuels. Par défaut, les remises sont ajoutées directement à la facture.', | ||||
|       save: 'sauver', | ||||
|       preference: 'Préférence | Préférences', | ||||
|       general_settings: 'Préférences par défaut pour le système.', | ||||
|       updated_message: 'Préférences mises à jour avec succès', | ||||
|       set_discount_per_item_message: 'Jeu de remise par article', | ||||
|       select_language: 'Choisir la langue', | ||||
|       select_time_zone: 'sélectionnez le fuseau horaire', | ||||
|       select_date_formate: 'sélectionnez Date Formate', | ||||
|       select_financial_year: 'sélectionner lexercice' | ||||
|     }, | ||||
|     update_app: { | ||||
|       title: "Mise à jour de l'application", | ||||
|       description: "mettre à jour la description de l'application", | ||||
|       check_update: 'Vérifier les mises à jour', | ||||
|       avail_update: 'Nouvelle mise à jour disponible', | ||||
|       next_version: 'Version suivante', | ||||
|       update: 'Mettre à jour maintenant', | ||||
|       update_progress: 'Mise à jour en cours...', | ||||
|       progress_text: "Cela ne prendra que quelques minutes. S'il vous plaît ne pas actualiser l'écran ou fermer la fenêtre avant la fin de la mise à jour", | ||||
|       update_success: "L'application a été mise à jour avec succès", | ||||
|       latest_message: 'Pas de mise a jour disponible! Vous êtes sur la dernière version.', | ||||
|       current_version: 'Version actuelle' | ||||
|     } | ||||
|   }, | ||||
|   wizard: { | ||||
|     account_info: 'Information sur le compte', | ||||
|     account_info_desc: 'Les détails ci-dessous seront utilisés pour créer le compte administrateur principal. Aussi, vous pouvez modifier les détails à tout moment après la connexion.', | ||||
|     name: 'Nom', | ||||
|     email: 'Email', | ||||
|     password: 'Mot de passe', | ||||
|     confirm_password: 'Confirmez le mot de passe', | ||||
|     save_cont: 'Enregistrer continuer', | ||||
|     company_info: 'Informations sur la société', | ||||
|     company_info_desc: 'Ces informations seront affichées sur les factures. Notez que vous pouvez éditer ceci plus tard sur la page des paramètres.', | ||||
|     company_name: 'Nom de la compagnie', | ||||
|     company_logo: 'Logo dentreprise', | ||||
|     logo_preview: 'Aperçu du logo', | ||||
|     preferences: 'Préférences', | ||||
|     preferences_desc: 'Préférences par défaut pour le système.', | ||||
|     country: 'Pays', | ||||
|     state: 'Etat', | ||||
|     city: 'Ville', | ||||
|     address: 'Adresse', | ||||
|     street: 'Street1 ' | 'Rue # 2', | ||||
|     phone: 'Téléphone', | ||||
|     zip_code: 'Code postal', | ||||
|     go_back: 'Retourner', | ||||
|     currency: 'Devise', | ||||
|     language: 'La langue', | ||||
|     time_zone: 'Fuseau horaire', | ||||
|     fiscal_year: 'Année financière', | ||||
|     date_format: 'Format de date', | ||||
|     from_address: "De l'adresse", | ||||
|     username: "Nom d'utilisateur", | ||||
|     next: 'Suivant', | ||||
|     continue: 'Continuer', | ||||
|     database: { | ||||
|       database: 'URL du site et base de données', | ||||
|       connection: 'Connexion à la base de données', | ||||
|       host: 'Hôte de base de données', | ||||
|       port: 'Port de base de données', | ||||
|       password: 'Mot de passe de base de données', | ||||
|       app_url: 'Application URL', | ||||
|       username: "Nom d'utilisateur de la base de données", | ||||
|       db_name: 'Nom de la base de données', | ||||
|       desc: "Créez une base de données sur votre serveur et définissez les informations d'identification à l'aide du formulaire ci-dessous." | ||||
|     }, | ||||
|     permissions: { | ||||
|       permissions: 'Les permissions', | ||||
|       permission_desc: "Vous trouverez ci-dessous la liste des autorisations de dossier requises pour le fonctionnement de l'application. Si la vérification des autorisations échoue, veillez à mettre à jour vos autorisations de dossier." | ||||
|     }, | ||||
|     mail: { | ||||
|       host: 'Mail Host', | ||||
|       port: 'Port mail', | ||||
|       driver: 'Pilote de courrier', | ||||
|       password: 'Mot de passe mail', | ||||
|       secret: 'Secret', | ||||
|       mailgun_secret: 'Mailgun Secret', | ||||
|       mailgun_domain: 'Domaine', | ||||
|       mailgun_endpoint: 'Mailgun Point Final', | ||||
|       ses_secret: 'SES Secret', | ||||
|       ses_key: 'SES clé', | ||||
|       from_name: 'Nom de messagerie', | ||||
|       from_mail: 'De ladresse mail', | ||||
|       username: "Mail Nom d'utilisateur", | ||||
|       mail_config: 'Configuration du courrier', | ||||
|       encryption: 'Chiffrement du courrier', | ||||
|       mail_config_desc: "Les détails ci-dessous seront utilisés pour mettre à jour l'environnement de messagerie. Aussi, vous pouvez modifier les détails à tout moment après la connexion." | ||||
|     }, | ||||
|     req: { | ||||
|       system_req: 'Configuration requise', | ||||
|       php_req_version: 'Php (version {version} nécessaire)', | ||||
|       check_req: 'Vérifier les exigences', | ||||
|       system_req_desc: 'Crater a quelques exigences de serveur. Assurez-vous que votre serveur dispose de la version PHP requise et de toutes les extensions mentionnées ci-dessous.' | ||||
|     }, | ||||
|     errors: { | ||||
|       migrate_failed: 'Migration impossible', | ||||
|       database_variables_save_error: 'Impossible de se connecter à la base de données avec les valeurs fournies.', | ||||
|       mail_variables_save_error: 'La configuration du courrier électronique a échoué.', | ||||
|       connection_failed: 'La connexion à la base de données a échoué' | ||||
|     }, | ||||
|     success: { | ||||
|       mail_variables_save_successfully: 'Email configuré avec succès', | ||||
|       database_variables_save_successfully: 'Base de données configurée avec succès.' | ||||
|     } | ||||
|   }, | ||||
|   layout_login: { | ||||
|     copyright_crater: 'Copyright @ Crater - 2019', | ||||
|     super_simple_invoicing: 'Super Simple Facturation', | ||||
|     for_freelancer: 'pour les pigistes et', | ||||
|     small_businesses: 'Petites entreprises ', | ||||
|     crater_help: 'Crater vous aide à suivre vos dépenses, à enregistrer vos paiements et à générer de belles', | ||||
|     invoices_and_estimates: 'factures et devis avec possibilité de choisir plusieurs modèles.' | ||||
|  | ||||
|   }, | ||||
|   validation: { | ||||
|     invalid_url: 'URL invalide (ex: http://www.crater.com)', | ||||
|     required: 'Champ requis', | ||||
|     email_incorrect: 'Adresse Email incorrecte.', | ||||
|     email_does_not_exist: "L'utilisateur avec un email donné n'existe pas", | ||||
|     send_reset_link: 'Envoyer le lien de réinitialisation', | ||||
|     not_yet: 'Pas encore? Envoyer à nouveau', | ||||
|     password_min_length: 'Le mot de passe doit contenir {nombre} caractères', | ||||
|     name_min_length: 'Le nom doit avoir au moins {count} lettres.', | ||||
|     enter_valid_tax_rate: 'Entrez un taux de taxe valide', | ||||
|     numbers_only: 'Chiffres uniquement.', | ||||
|     characters_only: 'Caractères seulement.', | ||||
|     password_incorrect: 'Les mots de passe doivent être identiques', | ||||
|     password_length: 'Le mot de passe doit comporter 5 caractères.', | ||||
|     qty_must_greater_than_zero: 'La quantité doit être supérieure à zéro.', | ||||
|     price_greater_than_zero: 'Le prix doit être supérieur à zéro.', | ||||
|     payment_greater_than_zero: 'Le paiement doit être supérieur à zéro.', | ||||
|     payment_greater_than_due_amount: 'Le paiement entré est plus que le montant dû de cette facture.', | ||||
|     quantity_maxlength: 'La quantité ne doit pas dépasser 20 chiffres.', | ||||
|     price_maxlength: 'Le prix ne doit pas dépasser 20 chiffres.', | ||||
|     price_minvalue: 'Le prix doit être supérieur à 0 chiffre', | ||||
|     amount_maxlength: 'Le montant ne doit pas dépasser 20 chiffres.', | ||||
|     amount_minvalue: 'Le montant doit être supérieur à 0 chiffre', | ||||
|     description_maxlength: 'La description ne doit pas dépasser 255 caractères.', | ||||
|     maximum_options_error: 'Maximum de {max} options sélectionnées. Commencez par supprimer une option sélectionnée pour en sélectionner une autre.', | ||||
|     notes_maxlength: 'Les notes ne doivent pas dépasser 255 caractères.', | ||||
|     address_maxlength: "L'adresse ne doit pas dépasser 255 caractères.", | ||||
|     ref_number_maxlength: 'Le numéro de référence ne doit pas dépasser 255 caractères.' | ||||
|   } | ||||
| } | ||||
							
								
								
									
										814
									
								
								resources/assets/js/plugins/fr.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										814
									
								
								resources/assets/js/plugins/fr.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,814 @@ | ||||
| { | ||||
|   "navigation": { | ||||
|     "dashboard": "Tableau de bord", | ||||
|     "customers": "Cliente", | ||||
|     "items": "Articles", | ||||
|     "invoices": "Factures", | ||||
|     "expenses": "Les dépenses", | ||||
|     "estimates": "Estimations", | ||||
|     "payments": "Paiements", | ||||
|     "reports": "Rapports", | ||||
|     "settings": "Paramètres", | ||||
|     "logout": "Se déconnecter" | ||||
|   }, | ||||
|   "general": { | ||||
|     "view_pdf": "Voir PDF", | ||||
|     "download_pdf": "Télécharger le PDF", | ||||
|     "save": "sauver", | ||||
|     "cancel": "Annuler", | ||||
|     "update": "Mise à jour", | ||||
|     "download": "Télécharger", | ||||
|     "from_date": "Partir de la date", | ||||
|     "to_date": "À ce jour", | ||||
|     "from": "De", | ||||
|     "to": "À", | ||||
|     "go_back": "Retourner", | ||||
|     "back_to_login": "Retour connexion?", | ||||
|     "home": "Accueil", | ||||
|     "filter": "Filtre", | ||||
|     "delete": "Effacer", | ||||
|     "edit": "Modifier", | ||||
|     "view": "Vue", | ||||
|     "add_new_item": "Ajoute un nouvel objet", | ||||
|     "clear_all": "Tout effacer", | ||||
|     "showing": "Montrant", | ||||
|     "of": "de", | ||||
|     "actions": "Actions", | ||||
|     "subtotal": "TOTAL", | ||||
|     "discount": "REMISE", | ||||
|     "fixed": "Fixée", | ||||
|     "percentage": "Pourcentage", | ||||
|     "tax": "IMPÔT", | ||||
|     "total_amount": "MONTANT TOTAL", | ||||
|     "bill_to": "facturer", | ||||
|     "ship_to": "Envoyez à", | ||||
|     "due": "Dû", | ||||
|     "draft": "Brouillon", | ||||
|     "sent": "Envoyée", | ||||
|     "all": "Tout", | ||||
|     "select_all": "Tout sélectionner", | ||||
|     "choose_file": "Cliquez ici pour choisir un fichier", | ||||
|     "choose_template": "Choisissez un modèle", | ||||
|     "choose": "Choisir", | ||||
|     "remove": "Retirer", | ||||
|     "powered_by": "Alimenté par", | ||||
|     "bytefury": "Bytefury", | ||||
|     "select_a_status": "Sélectionnez un statut", | ||||
|     "select_a_tax": "Sélectionnez une taxe", | ||||
|     "search": "Chercher", | ||||
|     "are_you_sure": "Êtes-vous sûr?", | ||||
|     "list_is_empty": "La liste est vide", | ||||
|     "no_tax_found": "Aucune taxe trouvée!", | ||||
|     "four_zero_four": "404", | ||||
|     "you_got_lost": "Oups! Vous vous êtes perdus!", | ||||
|     "go_home": "Rentrer chez soi", | ||||
|  | ||||
|     "setting_updated": "Réglage mis à jour avec succès", | ||||
|     "select_state": "Sélectionnez l'état", | ||||
|     "select_country": "Choisissez le pays", | ||||
|     "select_city": "Sélectionnez une ville", | ||||
|     "street_1": "Rue 1", | ||||
|     "street_2": "Rue # 2", | ||||
|     "action_failed": "Action : échoué" | ||||
|   }, | ||||
|   "dashboard": { | ||||
|     "select_year": "Sélectionnez lannée", | ||||
|     "cards": { | ||||
|       "due_amount": "Montant dû", | ||||
|       "customers": "Les clients", | ||||
|       "invoices": "Factures", | ||||
|       "estimates": "Estimations" | ||||
|     }, | ||||
|     "chart_info": { | ||||
|       "total_sales": "Ventes", | ||||
|       "total_receipts": "Reçus", | ||||
|       "total_expense": "Les dépenses", | ||||
|       "net_income": "Revenu net", | ||||
|       "year": "Sélectionnez lannée" | ||||
|     }, | ||||
|     "weekly_invoices": { | ||||
|       "title": "Factures hebdomadaires" | ||||
|     }, | ||||
|     "monthly_chart": { | ||||
|       "title": "Ventes et dépenses" | ||||
|     }, | ||||
|     "recent_invoices_card": { | ||||
|       "title": "Factures dues", | ||||
|       "due_on": "Due On", | ||||
|       "customer": "Cliente", | ||||
|       "amount_due": "Montant dû", | ||||
|       "actions": "Actions", | ||||
|       "view_all": "Voir tout" | ||||
|     }, | ||||
|     "recent_estimate_card": { | ||||
|       "title": "Estimations récentes", | ||||
|       "date": "Date", | ||||
|       "customer": "Cliente", | ||||
|       "amount_due": "Montant dû", | ||||
|       "actions": "Actions", | ||||
|       "view_all": "Voir tout" | ||||
|     } | ||||
|   }, | ||||
|   "tax_types": { | ||||
|     "name": "Nom", | ||||
|     "description": "La description", | ||||
|     "percent": "Pour cent", | ||||
|     "compound_tax": "Taxe composée" | ||||
|   }, | ||||
|   "customers": { | ||||
|     "title": "Les clients", | ||||
|     "add_customer": "Ajouter un client", | ||||
|     "contacts_list": "Liste de clients", | ||||
|     "name": "Nom", | ||||
|     "display_name": "Afficher un nom", | ||||
|     "primary_contact_name": "Nom du contact principal", | ||||
|     "contact_name": "Nom du contact", | ||||
|     "amount_due": "Montant dû", | ||||
|     "email": "Email", | ||||
|     "address": "Adresse", | ||||
|     "phone": "Téléphone", | ||||
|     "website": "Site Internet", | ||||
|     "country": "Pays", | ||||
|     "state": "Etat", | ||||
|     "city": "Ville", | ||||
|     "zip_code": "Code postal", | ||||
|     "added_on": "Ajouté le", | ||||
|     "action": "action", | ||||
|     "password": "Mot de passe", | ||||
|     "street_number": "Numéro de rue", | ||||
|     "primary_currency": "Devise principale", | ||||
|     "add_new_customer": "Ajouter un nouveau client", | ||||
|     "save_customer": "Enregistrer le client", | ||||
|     "update_customer": "Mettre à jour le client", | ||||
|     "customer": "Client | Les clients", | ||||
|     "new_customer": "Nouveau client", | ||||
|     "edit_customer": "Modifier le client", | ||||
|     "basic_info": "Informations de base", | ||||
|     "billing_address": "Adresse de facturation", | ||||
|     "shipping_address": "Adresse de livraison", | ||||
|     "copy_billing_address": "Copier de la facturation", | ||||
|     "no_customers": "Pas encore de clients!", | ||||
|     "no_customers_found": "Aucun client trouvé!", | ||||
|     "list_of_customers": "Cette section contiendra la liste des clients.", | ||||
|     "primary_display_name": "Nom daffichage principal", | ||||
|     "select_state": "Sélectionnez létat", | ||||
|     "select_country": "Choisissez le pays", | ||||
|     "select_city": "Sélectionnez une ville", | ||||
|     "select_currency": "Sélectionnez la devise", | ||||
|     "street_1": "Rue 1", | ||||
|     "street_2": "Rue 2", | ||||
|     "select_a_customer": "Sélectionnez un client", | ||||
|     "type_or_click": "Tapez ou cliquez pour sélectionner", | ||||
|  | ||||
|     "confirm_delete": "Vous ne pourrez pas récupérer ce client | Vous ne pourrez pas récupérer ces clients", | ||||
|     "created_message": "Client créé avec succès", | ||||
|     "updated_message": "Client mis à jour avec succès", | ||||
|     "deleted_message": "Client supprimé avec succès | Les clients supprimés avec succès" | ||||
|   }, | ||||
|   "items": { | ||||
|     "title": "Articles", | ||||
|     "items_list": "Liste darticles", | ||||
|     "name": "Nom", | ||||
|     "unit": "Unité", | ||||
|     "description": "La description", | ||||
|     "added_on": "Ajouté le", | ||||
|     "price": "Prix", | ||||
|     "date_of_creation": "Date de création", | ||||
|     "action": "action", | ||||
|     "add_item": "Ajouter un item", | ||||
|     "save_item": "Enregistrer lélément", | ||||
|     "update_item": "Mettre à jour lélément", | ||||
|     "item": "Article | Articles", | ||||
|     "add_new_item": "Ajoute un nouvel objet", | ||||
|     "new_item": "Nouvel article", | ||||
|     "edit_item": "Modifier larticle", | ||||
|     "no_items": "Aucun article pour le moment!", | ||||
|     "list_of_items": "Cette section contiendra la liste des éléments.", | ||||
|     "select_a_unit": "sélectionner lunité", | ||||
|  | ||||
|     "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", | ||||
|     "created_message": "Article créé avec succès", | ||||
|     "updated_message": "Élément mis à jour avec succès", | ||||
|     "deleted_message": "Élément supprimé avec succès | Éléments supprimés avec succès" | ||||
|   }, | ||||
|   "estimates": { | ||||
|     "title": "Estimations", | ||||
|     "estimate": "Estimation | Estimations", | ||||
|     "estimates_list": "Liste des estimations", | ||||
|     "days": "{jours} jours", | ||||
|     "months": "{mois} mois", | ||||
|     "years": "{années} Année", | ||||
|     "all": "Toute", | ||||
|     "paid": "Payé", | ||||
|     "unpaid": "Non payé", | ||||
|     "customer": "CLIENTE CLIENT", | ||||
|     "ref_no": "REF NO.", | ||||
|     "number": "NOMBRE", | ||||
|     "amount_due": "MONTANT DÛ", | ||||
|     "partially_paid": "Partiellement payé", | ||||
|     "total": "Totale", | ||||
|     "discount": "Remise", | ||||
|     "sub_total": "Total partiel", | ||||
|     "estimate_number": "Numéro destimation", | ||||
|     "ref_number": "Numéro de ref", | ||||
|     "contact": "Contact", | ||||
|     "add_item": "Ajouter un article", | ||||
|     "date": "Date", | ||||
|     "due_date": "Date déchéance", | ||||
|     "expiry_date": "Date dexpiration", | ||||
|     "status": "Statut", | ||||
|     "add_tax": "Ajouter une taxe", | ||||
|     "amount": "Montante", | ||||
|     "action": "action", | ||||
|     "notes": "Remarques", | ||||
|     "tax": "Impôt", | ||||
|     "estimate_template": "Modèle destimation", | ||||
|     "convert_to_invoice": "Convertir en facture", | ||||
|     "mark_as_sent": "Marquer comme envoyé", | ||||
|     "send_estimate": "Envoyer une estimation", | ||||
|     "record_payment": "Record de paiement", | ||||
|     "add_estimate": "Ajouter une estimation", | ||||
|     "save_estimate": "Sauvegarder lestimation", | ||||
|     "confirm_conversion": "Vous souhaitez convertir cette estimation en facture?", | ||||
|     "conversion_message": "Conversion réussie", | ||||
|     "confirm_send_estimate": "Cette estimation sera envoyée par courrier électronique au client.", | ||||
|     "confirm_mark_as_sent": "Cette estimation sera marquée comme envoyé", | ||||
|     "confirm_mark_as_accepted": "Cette estimation sera marquée comme acceptée", | ||||
|     "confirm_mark_as_rejected": "Cette estimation sera marquée comme Rejetée", | ||||
|     "mark_as_sent_successfully": "Estimation marquée comme envoyée avec succès", | ||||
|     "send_estimate_successfully": "Estimation envoyée avec succès", | ||||
|     "errors": { | ||||
|       "required": "Champ requis" | ||||
|     }, | ||||
|     "accepted": "Accepté", | ||||
|     "sent": "Envoyée", | ||||
|     "draft": "Brouillon", | ||||
|     "declined": "Diminué", | ||||
|     "new_estimate": "Nouvelle estimation", | ||||
|     "add_new_estimate": "Ajouter une nouvelle estimation", | ||||
|     "update_Estimate": "Mise à jour de lestimation", | ||||
|     "edit_estimate": "Modifier lestimation", | ||||
|     "items": "articles", | ||||
|     "Estimate": "Estimation | Estimations", | ||||
|     "add_new_tax": "Ajouter une nouvelle taxe", | ||||
|     "no_estimates": "Aucune estimation pour le moment!", | ||||
|     "list_of_estimates": "Cette section contiendra la liste des estimations.", | ||||
|     "mark_as_rejected": "Marquer comme rejeté", | ||||
|     "mark_as_accepted": "Marquer comme accepté", | ||||
|  | ||||
|     "marked_as_accepted_message": "Estimation marquée comme acceptée", | ||||
|     "marked_as_rejected_message": "Estimation marquée comme rejetée", | ||||
|     "confirm_delete": "Vous ne pourrez pas récupérer cette estimation | Vous ne pourrez pas récupérer ces estimations", | ||||
|     "created_message": "Estimation créée avec succès", | ||||
|     "updated_message": "Estimation mise à jour avec succès", | ||||
|     "deleted_message": "Estimation supprimée avec succès | Estimations supprimées avec succès", | ||||
|     "item": { | ||||
|       "title": "Titre de larticle", | ||||
|       "description": "La description", | ||||
|       "quantity": "Quantité", | ||||
|       "price": "Prix", | ||||
|       "discount": "Remise", | ||||
|       "total": "Totale", | ||||
|       "total_discount": "Remise totale", | ||||
|       "sub_total": "Total partiel", | ||||
|       "tax": "Impôt", | ||||
|       "amount": "Montante", | ||||
|       "select_an_item": "Tapez ou cliquez pour sélectionner un élément", | ||||
|       "type_item_description": "Type Item Description (optionnel)" | ||||
|     } | ||||
|   }, | ||||
|   "invoices": { | ||||
|     "title": "Factures", | ||||
|     "invoices_list": "Liste de factures", | ||||
|     "days": "{jours} jours", | ||||
|     "months": "{mois} mois", | ||||
|     "years": "{années} Année", | ||||
|     "all": "Toute", | ||||
|     "paid": "Payé", | ||||
|     "unpaid": "Non payé", | ||||
|     "customer": "CLIENTE CLIENT", | ||||
|     "paid_status": "Statut payé", | ||||
|     "ref_no": "REF NO.", | ||||
|     "number": "NOMBRE", | ||||
|     "amount_due": "MONTANT DÛ", | ||||
|     "partially_paid": "Partiellement payé", | ||||
|     "total": "Totale Total", | ||||
|     "discount": "Remise", | ||||
|     "sub_total": "Total partiel", | ||||
|     "invoice": "Facture | Factures", | ||||
|     "invoice_number": "Numéro de facture", | ||||
|     "ref_number": "Numéro de ref", | ||||
|     "contact": "Contact", | ||||
|     "add_item": "Ajouter un article", | ||||
|     "date": "Date", | ||||
|     "due_date": "Date déchéance", | ||||
|     "status": "Statut", | ||||
|     "add_tax": "Ajouter une taxe", | ||||
|     "amount": "Montante Montant", | ||||
|     "action": "action", | ||||
|     "notes": "Remarques", | ||||
|     "view": "Vue", | ||||
|     "send_invoice": "Envoyer une facture", | ||||
|     "invoice_template": "Modèle de facture", | ||||
|     "template": "Modèle", | ||||
|     "mark_as_sent": "Marquer comme envoyé", | ||||
|     "invoice_mark_as_sent": "Cette facture sera marquée comme envoyé", | ||||
|     "confirm_send": "Cette facture sera envoyée par courrier électronique au client.", | ||||
|     "invoice_date": "Date de facturation", | ||||
|     "record_payment": "Record de paiement", | ||||
|     "add_new_invoice": "Ajouter une nouvelle facture", | ||||
|     "update_expense": "Frais de mise à jour", | ||||
|     "edit_invoice": "Modifier la facture", | ||||
|     "new_invoice": "Nouvelle facture", | ||||
|     "save_invoice": "Enregistrer la facture", | ||||
|     "update_invoice": "Mettre à jour la facture", | ||||
|     "add_new_tax": "Ajouter une nouvelle taxe", | ||||
|     "no_invoices": "Aucune facture pour le moment!", | ||||
|     "list_of_invoices": "Cette section contiendra la liste des factures.", | ||||
|     "select_invoice": "Sélectionnez facture", | ||||
|     "mark_as_sent_successfully": "Facture marquée comme envoyée avec succès", | ||||
|     "send_invoice_successfully": "Facture envoyée avec succès", | ||||
|     "item": { | ||||
|       "title": "Titre de larticle", | ||||
|       "description": "La description", | ||||
|       "quantity": "Quantité", | ||||
|       "price": "Prix", | ||||
|       "discount": "Remise", | ||||
|       "total": "Totale Total", | ||||
|       "total_discount": "Remise totale", | ||||
|       "sub_total": "Total partiel", | ||||
|       "tax": "Impôt", | ||||
|       "amount": "Montante Montant", | ||||
|       "select_an_item": "Tapez ou cliquez pour sélectionner un élément", | ||||
|       "type_item_description": "Type Item Description (optionnel)" | ||||
|     }, | ||||
|     "payment_attached_message": "Un paiement est déjà associé à l'une des factures sélectionnées. Assurez-vous d’effacer d’abord les paiements en pièce jointe afin de procéder à la suppression.", | ||||
|     "confirm_delete": "Vous ne pourrez pas récupérer cette facture | Vous ne pourrez pas récupérer ces factures", | ||||
|     "created_message": "Facture créée avec succès", | ||||
|     "updated_message": "Facture mise à jour avec succès", | ||||
|     "deleted_message": "Invoice deleted successfully | Invoices deleted successfully", | ||||
|     "marked_as_sent_message": "Facture supprimée avec succès | Factures supprimées avec succès", | ||||
|     "invalid_due_amount_message": "Le paiement entré est supérieur au montant total dû pour cette facture. Veuillez vérifier et réessayer" | ||||
|   }, | ||||
|   "credit_notes": { | ||||
|     "title": "Notes de crédit", | ||||
|     "credit_notes_list": "Liste des notes de crédit", | ||||
|     "credit_notes": "Notes de crédit", | ||||
|     "contact": "Contact", | ||||
|     "date": "Date", | ||||
|     "amount": "Montante Montant", | ||||
|     "action": "action", | ||||
|     "credit_number": "Numéro de crédit", | ||||
|     "notes": "Remarques", | ||||
|     "confirm_delete": "Voulez-vous supprimer cet avoir?", | ||||
|     "item": { | ||||
|       "title": "Titre de larticle", | ||||
|       "description": "La description", | ||||
|       "quantity": "Quantité", | ||||
|       "price": "Prix", | ||||
|       "discount": "Remise", | ||||
|       "total": "Totale Total", | ||||
|       "total_discount": "Remise totale", | ||||
|       "sub_total": "Total partiel", | ||||
|       "tax": "Impôt" | ||||
|     } | ||||
|   }, | ||||
|   "payments": { | ||||
|     "title": "Paiements", | ||||
|     "payments_list": "Liste de paiements", | ||||
|     "record_payment": "Record de paiement", | ||||
|     "customer": "Cliente Client", | ||||
|     "date": "Date", | ||||
|     "amount": "Montante Montant", | ||||
|     "action": "action", | ||||
|     "payment_number": "Numéro de paiement", | ||||
|     "payment_mode": "Mode de paiement", | ||||
|     "invoice": "Facture dachat", | ||||
|     "note": "Remarque", | ||||
|     "add_payment": "Ajouter un paiement", | ||||
|     "new_payment": "Nouveau paiement", | ||||
|     "edit_payment": "Modifier le paiement", | ||||
|     "view_payment": "Voir le paiement", | ||||
|     "add_new_payment": "Ajouter un nouveau paiement", | ||||
|     "save_payment": "Enregistrer le paiement", | ||||
|     "update_payment": "Mettre à jour le paiement", | ||||
|     "payment": "Paiement | Paiements", | ||||
|     "no_payments": "Aucun paiement pour le moment!", | ||||
|     "list_of_payments": "Cette section contiendra la liste des paiements", | ||||
|     "select_payment_mode": "Sélectionnez le mode de paiement", | ||||
|  | ||||
|     "confirm_delete": "Vous ne pourrez pas récupérer ce paiement | Vous ne pourrez pas récupérer ces paiements", | ||||
|     "created_message": "Paiement créé avec succès", | ||||
|     "updated_message": "Paiement mis à jour avec succès", | ||||
|     "deleted_message": "Paiement supprimé avec succès | Paiements supprimés avec succès", | ||||
|     "invalid_amount_message": "Le montant du paiement est invalide" | ||||
|   }, | ||||
|   "expenses": { | ||||
|     "title": "Les dépenses", | ||||
|     "expenses_list": "Liste des dépenses", | ||||
|     "expense_title": "Titre", | ||||
|     "contact": "Contact", | ||||
|     "category": "Catégorie", | ||||
|     "from_date": "Partir de la date", | ||||
|     "to_date": "À ce jour", | ||||
|     "expense_date": "Date", | ||||
|     "description": "La description", | ||||
|     "receipt": "Le reçu", | ||||
|     "amount": "Montante Montant", | ||||
|     "action": "action", | ||||
|     "note": "Remarque", | ||||
|     "category_id": "Identifiant de catégorie", | ||||
|     "date": "Date de dépense", | ||||
|     "add_expense": "Ajouter une dépense", | ||||
|     "add_new_expense": "Ajouter une nouvelle dépense", | ||||
|     "save_expense": "Économiser des dépenses", | ||||
|     "update_expense": "Frais de mise à jour", | ||||
|     "download_receipt": "Télécharger le reçu", | ||||
|     "edit_expense": "Modifier les dépenses", | ||||
|     "new_expense": "Nouvelle dépense", | ||||
|     "expense": "Frais | Les dépenses", | ||||
|     "no_expenses": "Pas de dépenses pour le moment!", | ||||
|     "list_of_expenses": "Cette section contiendra la liste des dépenses.", | ||||
|  | ||||
|     "confirm_delete": "Vous ne pourrez pas récupérer cette dépense | Vous ne pourrez pas récupérer ces frais", | ||||
|     "created_message": "Dépense créée avec succès", | ||||
|     "updated_message": "Dépense mise à jour avec succès", | ||||
|     "deleted_message": "Dépense supprimée avec succès | Dépenses supprimées avec succès", | ||||
|     "categories": { | ||||
|       "categories_list": "Liste des catégories", | ||||
|       "title": "Titre", | ||||
|       "name": "Nom", | ||||
|       "description": "La description", | ||||
|       "amount": "Montante Montant", | ||||
|       "actions": "Actions", | ||||
|       "add_category": "ajouter une catégorie", | ||||
|       "new_category": "Nouvelle catégorie", | ||||
|       "category": "Catégorie | Les catégories", | ||||
|       "select_a_category": "choisissez une catégorie" | ||||
|     } | ||||
|   }, | ||||
|   "login": { | ||||
|     "email": "Email", | ||||
|     "password": "Mot de passe", | ||||
|     "forgot_password": "Mot de passe oublié?", | ||||
|     "or_signIn_with": "ou Connectez-vous avec:", | ||||
|     "login": "Sidentifier", | ||||
|     "register": "Sinscrire", | ||||
|     "reset_password": "réinitialiser le mot de passe", | ||||
|     "enter_email": "Entrer email", | ||||
|     "enter_password": "Entrer le mot de passe", | ||||
|     "retype_password": "Retaper le mot de passe", | ||||
|     "login_placeholder": "mail@example.com" | ||||
|   }, | ||||
|   "reports": { | ||||
|     "title": "rapport", | ||||
|     "from_date": "Partir de la date", | ||||
|     "to_date": "À ce jour", | ||||
|     "status": "Statut", | ||||
|     "paid": "Payé", | ||||
|     "unpaid": "Non payé", | ||||
|     "download_pdf": "Télécharger le PDF", | ||||
|     "view_pdf": "Voir PDF", | ||||
|     "update_report": "Rapport de mise à jour", | ||||
|     "report": "Rapport | Rapports", | ||||
|     "profit_loss": { | ||||
|       "profit_loss": "Perte de profit", | ||||
|       "to_date": "À ce jour", | ||||
|       "from_date": "Partir de la date", | ||||
|       "date_range": "Sélectionner une plage de dates" | ||||
|     }, | ||||
|     "sales": { | ||||
|       "sales": "Ventes", | ||||
|       "date_range": "Sélectionner une plage de dates", | ||||
|       "to_date": "À ce jour", | ||||
|       "from_date": "Partir de la date", | ||||
|       "report_type": "Type de rapport" | ||||
|     }, | ||||
|     "taxes": { | ||||
|       "taxes": "Les taxes", | ||||
|       "to_date": "À ce jour", | ||||
|       "from_date": "Partir de la date", | ||||
|       "date_range": "Sélectionner une plage de dates" | ||||
|     }, | ||||
|     "errors": { | ||||
|       "required": "Champ requis" | ||||
|     }, | ||||
|     "invoices": { | ||||
|       "invoice": "Facture dachat", | ||||
|       "invoice_date": "Date de facturation", | ||||
|       "due_date": "Date déchéance", | ||||
|       "amount": "Montante ", | ||||
|       "contact_name": "Nom du contact", | ||||
|       "status": "Statut" | ||||
|     }, | ||||
|     "estimates": { | ||||
|       "estimate": "Estimation", | ||||
|       "estimate_date": "Date destimation", | ||||
|       "due_date": "Date déchéance", | ||||
|       "estimate_number": "Numéro destimation", | ||||
|       "ref_number": "Numéro de ref", | ||||
|       "amount": "Montante", | ||||
|       "contact_name": "Nom du contact", | ||||
|       "status": "Statut" | ||||
|     }, | ||||
|     "expenses": { | ||||
|       "expenses": "Les dépenses", | ||||
|       "category": "Catégorie", | ||||
|       "date": "Date", | ||||
|       "amount": "Montante", | ||||
|       "to_date": "À ce jour", | ||||
|       "from_date": "Partir de la date", | ||||
|       "date_range": "Sélectionner une plage de dates" | ||||
|     } | ||||
|   }, | ||||
|   "settings": { | ||||
|     "menu_title": { | ||||
|       "account_settings": "Paramètres du compte", | ||||
|       "company_information": "Informations sur la société", | ||||
|       "preferences": "Préférences", | ||||
|       "notifications": "Les notifications", | ||||
|       "tax_types": "Types de taxe", | ||||
|       "expense_category": "Catégories de dépenses", | ||||
|       "update_app": "Mise à jour de l'application" | ||||
|     }, | ||||
|     "title": "Paramètres", | ||||
|     "setting": "Paramètres | Paramètres", | ||||
|     "general": "Générale", | ||||
|     "language": "La langue", | ||||
|     "primary_currency": "Devise principale", | ||||
|     "timezone": "Fuseau horaire", | ||||
|     "date_format": "Format de date", | ||||
|     "currencies": { | ||||
|       "title": "Monnaies", | ||||
|       "currency": "Monnaie | Monnaies", | ||||
|       "currencies_list": "Liste des devises", | ||||
|       "select_currency": "Sélectionnez la devise", | ||||
|       "name": "Nom", | ||||
|       "code": "Code", | ||||
|       "symbol": "symbole", | ||||
|       "precision": "Précision", | ||||
|       "thousand_separator": "Mille séparateur", | ||||
|       "decimal_separator": "Séparateur décimal", | ||||
|       "position": "Position", | ||||
|       "position_of_symbol": "Position du symbole", | ||||
|       "right": "Droite", | ||||
|       "left": "La gauche", | ||||
|       "action": "action", | ||||
|       "add_currency": "Ajouter une devise" | ||||
|     }, | ||||
|     "mail": { | ||||
|       "host": "Mail Host", | ||||
|       "port": "Port mail", | ||||
|       "driver": "Pilote de courrier", | ||||
|       "password": "Mot de passe mail", | ||||
|       "secret": "Secret", | ||||
|       "mailgun_secret": "Mailgun Secret", | ||||
|       "mailgun_domain": "Domaine", | ||||
|       "mailgun_endpoint": "Mailgun Point Final", | ||||
|       "ses_secret": "SES Secret", | ||||
|       "ses_key": "SES clé", | ||||
|       "from_name": "Nom de messagerie", | ||||
|       "from_mail": "De ladresse mail", | ||||
|       "username": "Mail Nom d'utilisateur", | ||||
|       "mail_config": "Configuration du courrier", | ||||
|       "encryption": "Chiffrement du courrier", | ||||
|       "mail_config_desc": "Les détails ci-dessous seront utilisés pour mettre à jour l'environnement de messagerie. Aussi, vous pouvez modifier les détails à tout moment après la connexion." | ||||
|     }, | ||||
|     "pdf": { | ||||
|       "title": "Paramètre PDF", | ||||
|       "footer_text": "Pied de page texte", | ||||
|       "pdf_layout": "Mise en page PDF" | ||||
|     }, | ||||
|     "company_info": { | ||||
|       "company_info": "Information dentreprise", | ||||
|       "company_name": "Nom de la compagnie", | ||||
|       "company_logo": "Logo dentreprise", | ||||
|       "section_description": "Informations sur votre entreprise qui figureront sur les factures, estimations et autres documents créés par Crater.", | ||||
|       "phone": "Téléphone", | ||||
|       "country": "Pays", | ||||
|       "state": "Etat", | ||||
|       "city": "Ville", | ||||
|       "address": "Adresse", | ||||
|       "zip": "Zip", | ||||
|       "save": "sauver", | ||||
|       "updated_message": "Informations sur la société mises à jour avec succès" | ||||
|     }, | ||||
|     "account_settings": { | ||||
|       "profile_picture": "Image de profil", | ||||
|       "name": "Nom", | ||||
|       "email": "Email", | ||||
|       "password": "Mot de passe", | ||||
|       "confirm_password": "Confirmez le mot de passe", | ||||
|       "account_settings": "Paramètres du compte", | ||||
|       "save": "sauver", | ||||
|       "section_description": "Vous pouvez mettre à jour votre nom, votre email et votre mot de passe en utilisant le formulaire ci-dessous.", | ||||
|       "updated_message": "Paramètres du compte mis à jour avec succès" | ||||
|     }, | ||||
|     "user_profile": { | ||||
|       "name": "Nom", | ||||
|       "email": "Email", | ||||
|       "password": "Mot de passe", | ||||
|       "confirm_password": "Confirmez le mot de passe" | ||||
|     }, | ||||
|     "notification": { | ||||
|       "title": "Notification", | ||||
|       "email": "Envoyer des notifications à", | ||||
|       "description": "Quelles notifications par courrier électronique souhaitez-vous recevoir lorsque quelque chose change?", | ||||
|       "invoice_viewed": "Facture consultée", | ||||
|       "invoice_viewed_desc": "Lorsque votre client visualise la facture envoyée via le tableau de bord du cratère.", | ||||
|       "estimate_viewed": "Estimation vue", | ||||
|       "estimate_viewed_desc": "Lorsque votre client visualise le devis envoyé via le tableau de bord du cratère.", | ||||
|       "save": "sauver", | ||||
|       "email_save_message": "Email enregistré avec succès", | ||||
|       "invoice_viewed_message": "Facture consultée", | ||||
|       "estimate_viewed_message": "Estimation vue", | ||||
|       "please_enter_email": "S il vous plaît entrer email" | ||||
|     }, | ||||
|     "tax_types": { | ||||
|       "title": "Types de taxe", | ||||
|       "add_tax": "Ajouter une 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.", | ||||
|       "add_new_tax": "Ajouter une nouvelle taxe", | ||||
|       "tax_settings": "Paramètres de taxe", | ||||
|       "tax_per_item": "Taxe par article", | ||||
|       "tax_name": "Nom de la taxe", | ||||
|       "compound_tax": "Taxe composée", | ||||
|       "percent": "Pour cent", | ||||
|       "action": "action", | ||||
|       "tax_setting_description": "Activez cette option si vous souhaitez ajouter des taxes à des postes de facture individuels. Par défaut, les taxes sont ajoutées directement à la facture.", | ||||
|       "created_message": "Type de taxe créé avec succès", | ||||
|       "updated_message": "Type de taxe mis à jour avec succès", | ||||
|       "deleted_message": "Type de taxe supprimé avec succès", | ||||
|       "confirm_delete": "Vous ne pourrez pas récupérer ce type de taxe", | ||||
|       "already_in_use": "La taxe est déjà utilisée" | ||||
|     }, | ||||
|     "expense_category": { | ||||
|       "title": "Catégories de dépenses", | ||||
|       "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.", | ||||
|       "add_new_category": "Ajouter une nouvelle catégorie", | ||||
|       "category_name": "Nom de catégorie", | ||||
|       "category_description": "La description", | ||||
|       "created_message": "Catégorie de dépenses créée avec succès", | ||||
|       "deleted_message": "La catégorie de dépenses a été supprimée avec succès", | ||||
|       "updated_message": "Catégorie de dépenses mise à jour avec succès", | ||||
|       "confirm_delete": "Vous ne pourrez pas récupérer cette catégorie de dépenses", | ||||
|       "already_in_use": "La catégorie est déjà utilisée" | ||||
|     }, | ||||
|     "preferences": { | ||||
|       "currency": "Devise", | ||||
|       "language": "La langue", | ||||
|       "time_zone": "Fuseau horaire", | ||||
|       "fiscal_year": "Année financière", | ||||
|       "date_format": "Format de date", | ||||
|       "discount_setting": "Réglage de remise", | ||||
|       "discount_per_item": "Remise par article", | ||||
|       "discount_setting_description": "Activez cette option si vous souhaitez ajouter une remise à des postes de facture individuels. Par défaut, les remises sont ajoutées directement à la facture.", | ||||
|       "save": "sauver", | ||||
|       "preference": "Préférence | Préférences", | ||||
|       "general_settings": "Préférences par défaut pour le système.", | ||||
|       "updated_message": "Préférences mises à jour avec succès", | ||||
|       "set_discount_per_item_message": "Jeu de remise par article", | ||||
|       "select_language": "Choisir la langue", | ||||
|       "select_time_zone": "sélectionnez le fuseau horaire", | ||||
|       "select_date_formate": "sélectionnez Date Formate", | ||||
|       "select_financial_year": "sélectionner lexercice" | ||||
|     }, | ||||
|     "update_app": { | ||||
|       "title": "Mise à jour de l'application", | ||||
|       "description": "mettre à jour la description de l'application", | ||||
|       "check_update": "Vérifier les mises à jour", | ||||
|       "avail_update": "Nouvelle mise à jour disponible", | ||||
|       "next_version": "Version suivante", | ||||
|       "update": "Mettre à jour maintenant", | ||||
|       "update_progress": "Mise à jour en cours...", | ||||
|       "progress_text": "Cela ne prendra que quelques minutes. S'il vous plaît ne pas actualiser l'écran ou fermer la fenêtre avant la fin de la mise à jour", | ||||
|       "update_success": "App a été mis à jour! Veuillez patienter pendant le rechargement automatique de la fenêtre de votre navigateur.", | ||||
|       "latest_message": "Pas de mise a jour disponible! Vous êtes sur la dernière version.", | ||||
|       "current_version": "Version actuelle" | ||||
|     } | ||||
|   }, | ||||
|   "wizard": { | ||||
|     "account_info": "Information sur le compte", | ||||
|     "account_info_desc": "Les détails ci-dessous seront utilisés pour créer le compte administrateur principal. Aussi, vous pouvez modifier les détails à tout moment après la connexion.", | ||||
|     "name": "Nom", | ||||
|     "email": "Email", | ||||
|     "password": "Mot de passe", | ||||
|     "confirm_password": "Confirmez le mot de passe", | ||||
|     "save_cont": "Enregistrer continuer", | ||||
|     "company_info": "Informations sur la société", | ||||
|     "company_info_desc": "Ces informations seront affichées sur les factures. Notez que vous pouvez éditer ceci plus tard sur la page des paramètres.", | ||||
|     "company_name": "Nom de la compagnie", | ||||
|     "company_logo": "Logo dentreprise", | ||||
|     "logo_preview": "Aperçu du logo", | ||||
|     "preferences": "Préférences", | ||||
|     "preferences_desc": "Préférences par défaut pour le système.", | ||||
|     "country": "Pays", | ||||
|     "state": "Etat", | ||||
|     "city": "Ville", | ||||
|     "address": "Adresse", | ||||
|     "street": "Rue 1 | Rue 2", | ||||
|     "phone": "Téléphone", | ||||
|     "zip_code": "Code postal", | ||||
|     "go_back": "Retourner", | ||||
|     "currency": "Devise", | ||||
|     "language": "La langue", | ||||
|     "time_zone": "Fuseau horaire", | ||||
|     "fiscal_year": "Année financière", | ||||
|     "date_format": "Format de date", | ||||
|     "from_address": "De l'adresse", | ||||
|     "username": "Nom d'utilisateur", | ||||
|     "next": "Suivant", | ||||
|     "continue": "Continuer", | ||||
|     "database": { | ||||
|       "database": "URL du site et base de données", | ||||
|       "connection": "Connexion à la base de données", | ||||
|       "host": "Hôte de base de données", | ||||
|       "port": "Port de base de données", | ||||
|       "password": "Mot de passe de base de données", | ||||
|       "app_url": "Application URL", | ||||
|       "username": "Nom d'utilisateur de la base de données", | ||||
|       "db_name": "Nom de la base de données", | ||||
|       "desc": "Créez une base de données sur votre serveur et définissez les informations d'identification à l'aide du formulaire ci-dessous." | ||||
|     }, | ||||
|     "permissions": { | ||||
|       "permissions": "Les permissions", | ||||
|       "permission_confirm_title": "Es-tu sur de vouloir continuer?", | ||||
|       "permission_confirm_desc": "La vérification de l\"autorisation du dossier a échoué", | ||||
|       "permission_desc": "Vous trouverez ci-dessous la liste des autorisations de dossier requises pour le fonctionnement de l'application. Si la vérification des autorisations échoue, veillez à mettre à jour vos autorisations de dossier." | ||||
|     }, | ||||
|     "mail": { | ||||
|       "host": "Mail Host", | ||||
|       "port": "Port mail", | ||||
|       "driver": "Pilote de courrier", | ||||
|       "password": "Mot de passe mail", | ||||
|       "secret": "Secret", | ||||
|       "mailgun_secret": "Mailgun Secret", | ||||
|       "mailgun_domain": "Domaine", | ||||
|       "mailgun_endpoint": "Mailgun Point Final", | ||||
|       "ses_secret": "SES Secret", | ||||
|       "ses_key": "SES clé", | ||||
|       "from_name": "Nom de messagerie", | ||||
|       "from_mail": "De ladresse mail", | ||||
|       "username": "Mail Nom d'utilisateur", | ||||
|       "mail_config": "Configuration du courrier", | ||||
|       "encryption": "Chiffrement du courrier", | ||||
|       "mail_config_desc": "Les détails ci-dessous seront utilisés pour mettre à jour l'environnement de messagerie. Aussi, vous pouvez modifier les détails à tout moment après la connexion." | ||||
|     }, | ||||
|     "req": { | ||||
|       "system_req": "Configuration requise", | ||||
|       "php_req_version": "Php (version {version} nécessaire)", | ||||
|       "check_req": "Vérifier les exigences", | ||||
|       "system_req_desc": "Crater a quelques exigences de serveur. Assurez-vous que votre serveur dispose de la version PHP requise et de toutes les extensions mentionnées ci-dessous." | ||||
|     }, | ||||
|     "errors": { | ||||
|       "migrate_failed": "Migration impossible", | ||||
|       "database_variables_save_error": "Impossible de se connecter à la base de données avec les valeurs fournies.", | ||||
|       "mail_variables_save_error": "La configuration du courrier électronique a échoué.", | ||||
|       "connection_failed": "La connexion à la base de données a échoué" | ||||
|     }, | ||||
|     "success": { | ||||
|       "mail_variables_save_successfully": "Email configuré avec succès", | ||||
|       "database_variables_save_successfully": "Base de données configurée avec succès." | ||||
|     } | ||||
|   }, | ||||
|   "layout_login": { | ||||
|     "copyright_crater": "Copyright @ Crater - 2019", | ||||
|     "super_simple_invoicing": "Super Simple Facturation", | ||||
|     "for_freelancer": "pour les pigistes et", | ||||
|     "small_businesses": "Petites entreprises ", | ||||
|     "crater_help": "Crater vous aide à suivre vos dépenses, à enregistrer vos paiements et à générer de belles", | ||||
|     "invoices_and_estimates": "factures et devis avec possibilité de choisir plusieurs modèles." | ||||
|  | ||||
|   }, | ||||
|   "validation": { | ||||
|     "invalid_url": "URL invalide (ex: http://www.crater.com)", | ||||
|     "required": "Champ requis", | ||||
|     "email_incorrect": "Adresse Email incorrecte.", | ||||
|     "email_does_not_exist": "L'utilisateur avec un email donné n'existe pas", | ||||
|     "send_reset_link": "Envoyer le lien de réinitialisation", | ||||
|     "not_yet": "Pas encore? Envoyer à nouveau", | ||||
|     "password_min_length": "Le mot de passe doit contenir {nombre} caractères", | ||||
|     "name_min_length": "Le nom doit avoir au moins {count} lettres.", | ||||
|     "enter_valid_tax_rate": "Entrez un taux de taxe valide", | ||||
|     "numbers_only": "Chiffres uniquement.", | ||||
|     "characters_only": "Caractères seulement.", | ||||
|     "password_incorrect": "Les mots de passe doivent être identiques", | ||||
|     "password_length": "Le mot de passe doit comporter 5 caractères.", | ||||
|     "qty_must_greater_than_zero": "La quantité doit être supérieure à zéro.", | ||||
|     "price_greater_than_zero": "Le prix doit être supérieur à zéro.", | ||||
|     "payment_greater_than_zero": "Le paiement doit être supérieur à zéro.", | ||||
|     "payment_greater_than_due_amount": "Le paiement entré est plus que le montant dû de cette facture.", | ||||
|     "quantity_maxlength": "La quantité ne doit pas dépasser 20 chiffres.", | ||||
|     "price_maxlength": "Le prix ne doit pas dépasser 20 chiffres.", | ||||
|     "price_minvalue": "Le prix doit être supérieur à 0 chiffre", | ||||
|     "amount_maxlength": "Le montant ne doit pas dépasser 20 chiffres.", | ||||
|     "amount_minvalue": "Le montant doit être supérieur à 0 chiffre", | ||||
|     "description_maxlength": "La description ne doit pas dépasser 255 caractères.", | ||||
|     "maximum_options_error": "Maximum de {max} options sélectionnées. Commencez par supprimer une option sélectionnée pour en sélectionner une autre.", | ||||
|     "notes_maxlength": "Les notes ne doivent pas dépasser 255 caractères.", | ||||
|     "address_maxlength": "L'adresse ne doit pas dépasser 255 caractères.", | ||||
|     "ref_number_maxlength": "Le numéro de référence ne doit pas dépasser 255 caractères." | ||||
|   } | ||||
| } | ||||
| @ -1,8 +1,8 @@ | ||||
| import Vue from 'vue' | ||||
| import VueI18n from 'vue-i18n' | ||||
| import en from './en' | ||||
| import fr from './fr' | ||||
| import es from './es' | ||||
| import en from './en.json' | ||||
| import fr from './fr.json' | ||||
| import es from './es.json' | ||||
|  | ||||
| Vue.use(VueI18n) | ||||
|  | ||||
|  | ||||
| @ -36,7 +36,9 @@ export const addCustomer = ({ commit, dispatch, state }, data) => { | ||||
| export const updateCustomer = ({ commit, dispatch, state }, data) => { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     window.axios.put(`/api/customers/${data.id}`, data).then((response) => { | ||||
|       commit(types.UPDATE_CUSTOMER, response.data) | ||||
|       if(response.data.success){ | ||||
|         commit(types.UPDATE_CUSTOMER, response.data) | ||||
|       } | ||||
|       resolve(response) | ||||
|     }).catch((err) => { | ||||
|       reject(err) | ||||
|  | ||||
| @ -12,11 +12,7 @@ export const loadData = ({ commit, dispatch, state }, id) => { | ||||
|  | ||||
| export const editCompany = ({ commit, dispatch, state }, data) => { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     window.axios.post('/api/settings/company', data, { | ||||
|       headers: { | ||||
|         'Content-Type': 'multipart/form-data' | ||||
|       } | ||||
|     }).then((response) => { | ||||
|     window.axios.post('/api/settings/company', data).then((response) => { | ||||
|       // commit(types.UPDATE_ITEM, response.data) | ||||
|       resolve(response) | ||||
|     }).catch((err) => { | ||||
|  | ||||
| @ -1,8 +1,9 @@ | ||||
| // import * as types from './mutation-types' | ||||
| import * as types from './mutation-types' | ||||
|  | ||||
| export const loadData = ({ commit, dispatch, state }, id) => { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     window.axios.get(`/api/settings/profile`).then((response) => { | ||||
|       commit(types.SET_USER, response.data) | ||||
|       resolve(response) | ||||
|     }).catch((err) => { | ||||
|       reject(err) | ||||
| @ -13,7 +14,29 @@ export const loadData = ({ commit, dispatch, state }, id) => { | ||||
| export const editUser = ({ commit, dispatch, state }, data) => { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     window.axios.put('/api/settings/profile', data).then((response) => { | ||||
|       // commit(types.UPDATE_USER, response.data) | ||||
|       commit(types.UPDATE_USER, response.data) | ||||
|       resolve(response) | ||||
|     }).catch((err) => { | ||||
|       reject(err) | ||||
|     }) | ||||
|   }) | ||||
| } | ||||
|  | ||||
| export const uploadOnboardAvatar = ({ commit, dispatch, state }, data) => { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     window.axios.post(`/api/admin/profile/upload-avatar`, data).then((response) => { | ||||
|       commit(types.UPDATE_USER, response.data.user) | ||||
|       resolve(response) | ||||
|     }).catch((err) => { | ||||
|       reject(err) | ||||
|     }) | ||||
|   }) | ||||
| } | ||||
|  | ||||
| export const uploadAvatar = ({ commit, dispatch, state }, data) => { | ||||
|   return new Promise((resolve, reject) => { | ||||
|     window.axios.post('/api/settings/profile/upload-avatar', data).then((response) => { | ||||
|       commit(types.UPDATE_USER, response.data.user) | ||||
|       resolve(response) | ||||
|     }).catch((err) => { | ||||
|       reject(err) | ||||
|  | ||||
| @ -1,2 +1,3 @@ | ||||
| export const SET_USER = 'SET_USER' | ||||
| export const UPDATE_USER = 'UPDATE_USER' | ||||
| export const UPDATE_USER_AVATAR = 'UPDATE_USER_AVATAR' | ||||
|  | ||||
| @ -2,10 +2,14 @@ import * as types from './mutation-types' | ||||
|  | ||||
| export default { | ||||
|   [types.SET_USER] (state, data) { | ||||
|     state.user = data.user | ||||
|     state.user = data | ||||
|   }, | ||||
|  | ||||
|   [types.UPDATE_USER] (state, data) { | ||||
|     state.user = data | ||||
|   }, | ||||
|  | ||||
|   [types.UPDATE_USER_AVATAR] (state, data) { | ||||
|     state.user.avatar = data.avatar | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -3,8 +3,8 @@ export default { | ||||
|   phone: null, | ||||
|   address_street_1: null, | ||||
|   address_street_2: null, | ||||
|   city_id: null, | ||||
|   state_id: null, | ||||
|   city: null, | ||||
|   state: null, | ||||
|   country_id: null, | ||||
|   zip: null, | ||||
|   type: null | ||||
|  | ||||
| @ -119,16 +119,10 @@ | ||||
|               </div> | ||||
|               <div class="form-group"> | ||||
|                 <label class="form-label">{{ $t('customers.state') }}</label> | ||||
|                 <base-select | ||||
|                   v-model="billing_state" | ||||
|                   :options="billingStates" | ||||
|                   :searchable="true" | ||||
|                   :show-labels="false" | ||||
|                   :tabindex="9" | ||||
|                   :disabled="isDisabledBillingState" | ||||
|                   :placeholder="$t('general.select_state')" | ||||
|                   label="name" | ||||
|                   track-by="id" | ||||
|                 <base-input | ||||
|                   v-model="billing.state" | ||||
|                   name="billing.state" | ||||
|                   type="text" | ||||
|                 /> | ||||
|               </div> | ||||
|               <div class="form-group"> | ||||
| @ -176,16 +170,10 @@ | ||||
|               </div> | ||||
|               <div class="form-group"> | ||||
|                 <label class="form-label">{{ $t('customers.city') }}</label> | ||||
|                 <base-select | ||||
|                   v-model="billing_city" | ||||
|                   :options="billingCities" | ||||
|                   :searchable="true" | ||||
|                   :show-labels="false" | ||||
|                   :disabled="isDisabledBillingCity" | ||||
|                   :tabindex="10" | ||||
|                   :placeholder="$t('general.select_city')" | ||||
|                   label="name" | ||||
|                   track-by="id" | ||||
|                 <base-input | ||||
|                   v-model="billing.city" | ||||
|                   name="billing.city" | ||||
|                   type="text" | ||||
|                 /> | ||||
|               </div> | ||||
|               <div class="form-group"> | ||||
| @ -233,16 +221,10 @@ | ||||
|               </div> | ||||
|               <div class="form-group"> | ||||
|                 <label class="form-label">{{ $t('customers.state') }}</label> | ||||
|                 <base-select | ||||
|                   v-model="shipping_state" | ||||
|                   :options="shippingStates" | ||||
|                   :searchable="true" | ||||
|                   :show-labels="false" | ||||
|                   :tabindex="17" | ||||
|                   :disabled="isDisabledShippingState" | ||||
|                   :placeholder="$t('general.select_state')" | ||||
|                   label="name" | ||||
|                   track-by="id" | ||||
|                 <base-input | ||||
|                   v-model="shipping.state" | ||||
|                   name="shipping.state" | ||||
|                   type="text" | ||||
|                 /> | ||||
|               </div> | ||||
|               <div class="form-group"> | ||||
| @ -290,16 +272,10 @@ | ||||
|               </div> | ||||
|               <div class="form-group"> | ||||
|                 <label class="form-label">{{ $t('customers.city') }}</label> | ||||
|                 <base-select | ||||
|                   v-model="shipping_city" | ||||
|                   :options="shippingCities" | ||||
|                   :searchable="true" | ||||
|                   :show-labels="false" | ||||
|                   :tabindex="18" | ||||
|                   :disabled="isDisabledShippingCity" | ||||
|                   :placeholder="$t('general.select_city')" | ||||
|                   label="name" | ||||
|                   track-by="id" | ||||
|                 <base-input | ||||
|                   v-model="shipping.city" | ||||
|                   name="shipping.city" | ||||
|                   type="text" | ||||
|                 /> | ||||
|               </div> | ||||
|               <div class="form-group"> | ||||
| @ -344,7 +320,7 @@ import { mapActions, mapGetters } from 'vuex' | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| import AddressStub from '../../stub/address' | ||||
| const { required, minLength, email, numeric, url, maxLength } = require('vuelidate/lib/validators') | ||||
| const { required, minLength, email, url, maxLength } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { MultiSelect }, | ||||
| @ -366,8 +342,8 @@ export default { | ||||
|       billing: { | ||||
|         name: null, | ||||
|         country_id: null, | ||||
|         state_id: null, | ||||
|         city_id: null, | ||||
|         state: null, | ||||
|         city: null, | ||||
|         phone: null, | ||||
|         zip: null, | ||||
|         address_street_1: null, | ||||
| @ -377,8 +353,8 @@ export default { | ||||
|       shipping: { | ||||
|         name: null, | ||||
|         country_id: null, | ||||
|         state_id: null, | ||||
|         city_id: null, | ||||
|         state: null, | ||||
|         city: null, | ||||
|         phone: null, | ||||
|         zip: null, | ||||
|         address_street_1: null, | ||||
| @ -386,26 +362,12 @@ export default { | ||||
|         type: 'shipping' | ||||
|       }, | ||||
|       currencyList: [], | ||||
|       isDisabledBillingState: true, | ||||
|       isDisabledBillingCity: true, | ||||
|       isDisabledShippingState: true, | ||||
|       isDisabledShippingCity: true, | ||||
|  | ||||
|       billing_country: null, | ||||
|       billing_city: null, | ||||
|       billing_state: null, | ||||
|  | ||||
|       shipping_country: null, | ||||
|       shipping_city: null, | ||||
|       shipping_state: null, | ||||
|  | ||||
|       billingCountries: [], | ||||
|       billingStates: [], | ||||
|       billingCities: [], | ||||
|  | ||||
|       shippingCountries: [], | ||||
|       shippingStates: [], | ||||
|       shippingCities: [] | ||||
|       shippingCountries: [] | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
| @ -455,61 +417,13 @@ export default { | ||||
|       if (newCountry) { | ||||
|         this.billing.country_id = newCountry.id | ||||
|         this.isDisabledBillingState = false | ||||
|         this.billing_state = null | ||||
|         this.billing_city = null | ||||
|         this.fetchBillingState() | ||||
|       } | ||||
|     }, | ||||
|     billing_state (newState) { | ||||
|       if (newState) { | ||||
|         this.billing.state_id = newState.id | ||||
|         this.isDisabledBillingCity = false | ||||
|         this.billing_city = null | ||||
|         this.fetchBillingCities() | ||||
|         return true | ||||
|       } | ||||
|       this.billing_city = null | ||||
|       this.isDisabledBillingCity = true | ||||
|       return true | ||||
|     }, | ||||
|     billing_city (newCity) { | ||||
|       if (newCity) { | ||||
|         this.billing.city_id = newCity.id | ||||
|       } | ||||
|     }, | ||||
|     shipping_country (newCountry) { | ||||
|       if (newCountry) { | ||||
|         this.shipping.country_id = newCountry.id | ||||
|         this.isDisabledShippingState = false | ||||
|         this.fetchShippingState() | ||||
|         if (this.isCopyFromBilling) { | ||||
|           return true | ||||
|         } | ||||
|         this.shipping_state = null | ||||
|         this.shipping_city = null | ||||
|         return true | ||||
|       } | ||||
|     }, | ||||
|     shipping_state (newState) { | ||||
|       if (newState) { | ||||
|         this.shipping.state_id = newState.id | ||||
|         this.isDisabledShippingCity = false | ||||
|         this.fetchShippingCities() | ||||
|         if (this.isCopyFromBilling) { | ||||
|           this.isCopyFromBilling = false | ||||
|           return true | ||||
|         } | ||||
|         this.shipping_city = null | ||||
|         return true | ||||
|       } | ||||
|       this.shipping_city = null | ||||
|       this.isDisabledShippingCity = true | ||||
|       return true | ||||
|     }, | ||||
|     shipping_city (newCity) { | ||||
|       if (newCity) { | ||||
|         this.shipping.city_id = newCity.id | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   mounted () { | ||||
| @ -586,11 +500,16 @@ export default { | ||||
|         this.isLoading = true | ||||
|         try { | ||||
|           let response = await this.updateCustomer(this.formData) | ||||
|           if (response.data) { | ||||
|           if (response.data.success) { | ||||
|             window.toastr['success'](this.$t('customers.updated_message')) | ||||
|             this.$router.push('/admin/customers') | ||||
|             this.isLoading = false | ||||
|             return true | ||||
|           } else { | ||||
|             this.isLoading = false | ||||
|             if (response.data.error) { | ||||
|               window.toastr['error'](this.$t('validation.email_already_taken')) | ||||
|             } | ||||
|           } | ||||
|         } catch (err) { | ||||
|           if (err.response.data.errors.email) { | ||||
| @ -619,42 +538,6 @@ export default { | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     async fetchBillingState () { | ||||
|       let res = await window.axios.get(`/api/states/${this.billing_country.id}`) | ||||
|       if (res) { | ||||
|         this.billingStates = res.data.states | ||||
|       } | ||||
|       if (this.isEdit) { | ||||
|         this.billing_state = this.billingStates.find((state) => state.id === this.billing.state_id) | ||||
|       } | ||||
|     }, | ||||
|     async fetchBillingCities () { | ||||
|       let res = await window.axios.get(`/api/cities/${this.billing_state.id}`) | ||||
|       if (res) { | ||||
|         this.billingCities = res.data.cities | ||||
|       } | ||||
|       if (this.isEdit) { | ||||
|         this.billing_city = this.billingCities.find((city) => city.id === this.billing.city_id) | ||||
|       } | ||||
|     }, | ||||
|     async fetchShippingState () { | ||||
|       let res = await window.axios.get(`/api/states/${this.shipping_country.id}`) | ||||
|       if (res) { | ||||
|         this.shippingStates = res.data.states | ||||
|       } | ||||
|       if (this.isEdit) { | ||||
|         this.shipping_state = this.shippingStates.find((s) => s.id === this.shipping.state_id) | ||||
|       } | ||||
|     }, | ||||
|     async fetchShippingCities () { | ||||
|       let res = await window.axios.get(`/api/cities/${this.shipping_state.id}`) | ||||
|       if (res) { | ||||
|         this.shippingCities = res.data.cities | ||||
|       } | ||||
|       if (this.isEdit) { | ||||
|         this.shipping_city = this.shippingCities.find((c) => c.id === this.shipping.city_id) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -46,7 +46,7 @@ | ||||
|                       {{ selectedCustomer.billing_address.address_street_2 }} | ||||
|                     </label> | ||||
|                     <label v-if="selectedCustomer.billing_address.city && selectedCustomer.billing_address.state"> | ||||
|                       {{ selectedCustomer.billing_address.city.name }}, {{ selectedCustomer.billing_address.state.name }} {{ selectedCustomer.billing_address.zip }} | ||||
|                       {{ selectedCustomer.billing_address.city }}, {{ selectedCustomer.billing_address.state }} {{ selectedCustomer.billing_address.zip }} | ||||
|                     </label> | ||||
|                     <label v-if="selectedCustomer.billing_address.country"> | ||||
|                       {{ selectedCustomer.billing_address.country.name }} | ||||
| @ -71,7 +71,7 @@ | ||||
|                       {{ selectedCustomer.shipping_address.address_street_2 }} | ||||
|                     </label> | ||||
|                     <label v-if="selectedCustomer.shipping_address.city && selectedCustomer.shipping_address"> | ||||
|                       {{ selectedCustomer.shipping_address.city.name }}, {{ selectedCustomer.shipping_address.state.name }} {{ selectedCustomer.shipping_address.zip }} | ||||
|                       {{ selectedCustomer.shipping_address.city }}, {{ selectedCustomer.shipping_address.state }} {{ selectedCustomer.shipping_address.zip }} | ||||
|                     </label> | ||||
|                     <label v-if="selectedCustomer.shipping_address.country" class="country"> | ||||
|                       {{ selectedCustomer.shipping_address.country.name }} | ||||
|  | ||||
| @ -36,7 +36,7 @@ | ||||
|               <base-input | ||||
|                 v-model="item.quantity" | ||||
|                 :invalid="$v.item.quantity.$error" | ||||
|                 type="number" | ||||
|                 type="text" | ||||
|                 small | ||||
|                 @keyup="updateItem" | ||||
|                 @input="$v.item.quantity.$touch()" | ||||
| @ -353,7 +353,7 @@ export default { | ||||
|       this.item.name = val | ||||
|     }, | ||||
|     deselectItem () { | ||||
|       this.item = {...EstimateStub, id: this.item.id} | ||||
|       this.item = {...EstimateStub, id: this.item.id, taxes: [{...TaxStub, id: Guid.raw()}]} | ||||
|       this.$nextTick(() => { | ||||
|         this.$refs.itemSelect.$refs.baseSelect.$refs.search.focus() | ||||
|       }) | ||||
|  | ||||
| @ -44,7 +44,7 @@ | ||||
|                       {{ selectedCustomer.billing_address.address_street_2 }} | ||||
|                     </label> | ||||
|                     <label v-if="selectedCustomer.billing_address.city && selectedCustomer.billing_address.state"> | ||||
|                       {{ selectedCustomer.billing_address.city.name }}, {{ selectedCustomer.billing_address.state.name }} {{ selectedCustomer.billing_address.zip }} | ||||
|                       {{ selectedCustomer.billing_address.city }}, {{ selectedCustomer.billing_address.state }} {{ selectedCustomer.billing_address.zip }} | ||||
|                     </label> | ||||
|                     <label v-if="selectedCustomer.billing_address.country"> | ||||
|                       {{ selectedCustomer.billing_address.country.name }} | ||||
| @ -69,7 +69,7 @@ | ||||
|                       {{ selectedCustomer.shipping_address.address_street_2 }} | ||||
|                     </label> | ||||
|                     <label v-if="selectedCustomer.shipping_address.city && selectedCustomer.shipping_address"> | ||||
|                       {{ selectedCustomer.shipping_address.city.name }}, {{ selectedCustomer.shipping_address.state.name }} {{ selectedCustomer.shipping_address.zip }} | ||||
|                       {{ selectedCustomer.shipping_address.city }}, {{ selectedCustomer.shipping_address.state }} {{ selectedCustomer.shipping_address.zip }} | ||||
|                     </label> | ||||
|                     <label v-if="selectedCustomer.shipping_address.country" class="country"> | ||||
|                       {{ selectedCustomer.shipping_address.country.name }} | ||||
|  | ||||
| @ -36,7 +36,7 @@ | ||||
|               <base-input | ||||
|                 v-model="item.quantity" | ||||
|                 :invalid="$v.item.quantity.$error" | ||||
|                 type="number" | ||||
|                 type="text" | ||||
|                 small | ||||
|                 @keyup="updateItem" | ||||
|                 @input="$v.item.quantity.$touch()" | ||||
| @ -354,7 +354,7 @@ export default { | ||||
|       this.item.name = val | ||||
|     }, | ||||
|     deselectItem () { | ||||
|       this.item = {...InvoiceStub, id: this.item.id} | ||||
|       this.item = {...InvoiceStub, id: this.item.id, taxes: [{...TaxStub, id: Guid.raw()}]} | ||||
|       this.$nextTick(() => { | ||||
|         this.$refs.itemSelect.$refs.baseSelect.$refs.search.focus() | ||||
|       }) | ||||
|  | ||||
| @ -286,7 +286,7 @@ export default { | ||||
|           let request = await this.deleteInvoice(this.id) | ||||
|           if (request.data.success) { | ||||
|             window.toastr['success'](this.$tc('invoices.deleted_message', 1)) | ||||
|             this.$router.push('/admin/invoices/') | ||||
|             this.$router.push('/admin/invoices') | ||||
|           } else if (request.data.error) { | ||||
|             window.toastr['error'](request.data.message) | ||||
|           } | ||||
|  | ||||
| @ -58,7 +58,7 @@ | ||||
|             aria-expanded="false" | ||||
|             class="avatar" | ||||
|           > | ||||
|             <img src="/images/avatar.png" alt="Avatar"> | ||||
|             <img :src="profilePicture" alt="Avatar"> | ||||
|           </a> | ||||
|           <v-dropdown-item> | ||||
|             <router-link class="dropdown-item" to="/admin/settings"> | ||||
| @ -83,7 +83,25 @@ | ||||
| import { mapGetters, mapActions } from 'vuex' | ||||
|  | ||||
| export default { | ||||
|   computed: { | ||||
|     ...mapGetters('userProfile', [ | ||||
|       'user' | ||||
|     ]), | ||||
|     profilePicture () { | ||||
|       if (this.user && this.user.avatar !== null) { | ||||
|         return this.user.avatar | ||||
|       } else { | ||||
|         return '/images/default-avatar.jpg' | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   created () { | ||||
|     this.loadData() | ||||
|   }, | ||||
|   methods: { | ||||
|     ...mapActions('userProfile', [ | ||||
|       'loadData' | ||||
|     ]), | ||||
|     ...mapActions({ | ||||
|       companySelect: 'changeCompany' | ||||
|     }), | ||||
|  | ||||
| @ -1,459 +0,0 @@ | ||||
| <template> | ||||
|   <div class="header-bottom"> | ||||
|     <div class="header-nav vue-dropdown-menu"> | ||||
|       <v-dropdown active-url="/admin/dashboard"> | ||||
|         <template slot="title"> | ||||
|           <a href="#"> | ||||
|             <i class="icon-fa icon-fa-dashboard"/>{{ $t('navigation.dashboard') }} | ||||
|             <span class="icon-fa arrow icon-fa-fw"/> | ||||
|           </a> | ||||
|         </template> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/dashboard/basic"> | ||||
|               Basic | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/dashboard/ecommerce"> | ||||
|               Ecommerce | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/dashboard/finance"> | ||||
|               Finance | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/layouts"> | ||||
|         <template slot="title"> | ||||
|           <a href="#"> | ||||
|             <i class="icon-fa icon-fa-th-large"/>Layouts | ||||
|             <span class="icon-fa arrow icon-fa-fw"/> | ||||
|           </a> | ||||
|         </template> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/layouts/sidebar"> | ||||
|               Sidebar | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/layouts/horizontal"> | ||||
|               Horizontal | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/layouts/icons-sidebar"> | ||||
|               Icon Sidebar | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/basic-ui"> | ||||
|         <template slot="title"> | ||||
|           <a href="#"> | ||||
|             <i class="icon-fa icon-fa-star"/>Basic UI | ||||
|             <span class="icon-fa arrow icon-fa-fw"/> | ||||
|           </a> | ||||
|         </template> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/basic-ui/buttons"> | ||||
|               Buttons | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/basic-ui/cards"> | ||||
|               Cards | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/basic-ui/tabs"> | ||||
|               Tabs & Accordians | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/basic-ui/typography"> | ||||
|               Typography | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/basic-ui/tables"> | ||||
|               Tables | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/basic-ui/modals"> | ||||
|               Modals | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/basic-ui/progress-bars"> | ||||
|               Progress Bar | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/components"> | ||||
|         <template slot="title"> | ||||
|           <a href="#"> | ||||
|             <i class="icon-fa icon-fa-puzzle-piece"/>Components | ||||
|             <span class="icon-fa arrow icon-fa-fw"/> | ||||
|           </a> | ||||
|         </template> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/calendar"> | ||||
|               Calendar | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/datatables"> | ||||
|               Jquery Datatables | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/mail-box"> | ||||
|               MailBox | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/calendar"> | ||||
|               Calendar | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/datatables"> | ||||
|               Jquery Datatables | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/image-cropper"> | ||||
|               ImageCropper | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/image-zoom"> | ||||
|               ImageZoom | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/nestable-list"> | ||||
|               Nestable List | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/nestable-tree"> | ||||
|               Nestable Tree | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/notifications"> | ||||
|               Notifications | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown active-url="/admin/layouts"> | ||||
|           <template slot="title"> | ||||
|             <a href="#"> | ||||
|               <i class="icon-fa icon-fa-th-large"/>Layouts | ||||
|               <span class="icon-fa arrow icon-fa-fw"/> | ||||
|             </a> | ||||
|           </template> | ||||
|           <v-dropdown-item> | ||||
|             <template slot="item-title"> | ||||
|               <router-link to="/admin/layouts/sidebar"> | ||||
|                 Sidebar | ||||
|               </router-link> | ||||
|             </template> | ||||
|           </v-dropdown-item> | ||||
|           <v-dropdown-item> | ||||
|             <template slot="item-title"> | ||||
|               <router-link to="/admin/layouts/horizontal"> | ||||
|                 Horizontal | ||||
|               </router-link> | ||||
|             </template> | ||||
|           </v-dropdown-item> | ||||
|         </v-dropdown> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/sweet-modals"> | ||||
|               Sweet Modals | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/image-zoom"> | ||||
|               ImageZoom | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/components/mail-box"> | ||||
|               MailBox | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/chart"> | ||||
|         <template slot="title"> | ||||
|           <a href="#"> | ||||
|             <i class="icon-fa icon-fa-bar-chart"/>Charts | ||||
|             <span class="icon-fa arrow icon-fa-fw"/> | ||||
|           </a> | ||||
|         </template> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/charts/amchart"> | ||||
|               AM Charts | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/charts/chartjs"> | ||||
|               Chart JS | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/charts/gauge"> | ||||
|               Gauges | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/charts/morris"> | ||||
|               Morris | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/charts/sparkline"> | ||||
|               Sparkline | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/icons"> | ||||
|         <template slot="title"> | ||||
|           <a href="#"> | ||||
|             <i class="icon-fa icon-fa-eye"/>Icons | ||||
|             <span class="icon-fa arrow icon-fa-fw"/> | ||||
|           </a> | ||||
|         </template> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/icons/icomoon"> | ||||
|               IcoMoon | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/icons/fontawesome"> | ||||
|               Font Awesome | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/forms"> | ||||
|         <template slot="title"> | ||||
|           <a href="#"> | ||||
|             <i class="icon-fa icon-fa-rocket"/>Form | ||||
|             <span class="icon-fa arrow icon-fa-fw"/> | ||||
|           </a> | ||||
|         </template> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/general"> | ||||
|               General Elements | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/advanced"> | ||||
|               Advanced Elements | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item><v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/layouts"> | ||||
|               Form Layouts | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/validation"> | ||||
|               Form Validation | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/wizards"> | ||||
|               Form Wizard | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/wizards-2"> | ||||
|               Form Wizard 2 | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/wizards-3"> | ||||
|               Form Wizard 3 | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/editors"> | ||||
|               Editors | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/vee"> | ||||
|               Vee Validate | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/forms/vuelidate"> | ||||
|               Vuelidate | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/gallery"> | ||||
|         <template slot="title"> | ||||
|           <a href="#"> | ||||
|             <i class="icon-fa icon-fa-image"/>Gallery | ||||
|             <span class="icon-fa arrow icon-fa-fw"/> | ||||
|           </a> | ||||
|         </template> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/gallery/grid"> | ||||
|               Grid | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/gallery/masonry-grid"> | ||||
|               Masonry Grid | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/users"> | ||||
|         <template slot="title"> | ||||
|           <a href="#"> | ||||
|             <i class="icon-fa icon-fa-user"/>Users | ||||
|             <span class="icon-fa arrow icon-fa-fw"/> | ||||
|           </a> | ||||
|         </template> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/users/profile"> | ||||
|               Profile | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|         <v-dropdown-item> | ||||
|           <template slot="item-title"> | ||||
|             <router-link to="/admin/users"> | ||||
|               All Users | ||||
|             </router-link> | ||||
|           </template> | ||||
|         </v-dropdown-item> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/todo-item"> | ||||
|         <template slot="title"> | ||||
|           <router-link to="/admin/todo-item"> | ||||
|             <i class="icon-fa icon-fa-check"/>Todos | ||||
|           </router-link> | ||||
|         </template> | ||||
|       </v-dropdown> | ||||
|       <v-dropdown active-url="/admin/settings"> | ||||
|         <template slot="title"> | ||||
|           <router-link to="/admin/settings"> | ||||
|             <i class="icon-fa icon-fa-cogs"/>Settings | ||||
|           </router-link> | ||||
|         </template> | ||||
|       </v-dropdown> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script type="text/babel"> | ||||
| import VDropdown from '../../../components/dropdown/VDropdown' | ||||
| import VDropdownItem from '../../../components/dropdown/VDropdownItem' | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     VDropdown, | ||||
|     VDropdownItem | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       sidebar: 'sidebar' | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| @ -83,7 +83,7 @@ | ||||
|                   :allow-empty="false" | ||||
|                   :disabled="isEdit" | ||||
|                   :placeholder="$t('invoices.select_invoice')" | ||||
|                   label="invoice_number" | ||||
|                   :custom-label="invoiceWithAmount" | ||||
|                   track-by="invoice_number" | ||||
|                 /> | ||||
|               </div> | ||||
| @ -183,7 +183,8 @@ export default { | ||||
|       customerList: [], | ||||
|       invoiceList: [], | ||||
|       isLoading: false, | ||||
|       maxPayableAmount: Number.MAX_SAFE_INTEGER | ||||
|       maxPayableAmount: Number.MAX_SAFE_INTEGER, | ||||
|       isSettingInitialData: true | ||||
|     } | ||||
|   }, | ||||
|   validations () { | ||||
| @ -246,10 +247,15 @@ export default { | ||||
|   watch: { | ||||
|     customer (newValue) { | ||||
|       this.formData.user_id = newValue.id | ||||
|       this.invoice = null | ||||
|       this.formData.amount = 0 | ||||
|       this.invoiceList = [] | ||||
|       if (!this.isEdit) { | ||||
|         if (this.isSettingInitialData) { | ||||
|           this.isSettingInitialData = false | ||||
|         } else { | ||||
|           this.invoice = null | ||||
|           this.formData.invoice_id = null | ||||
|         } | ||||
|         this.formData.amount = 0 | ||||
|         this.invoiceList = [] | ||||
|         this.fetchCustomerInvoices(newValue.id) | ||||
|       } | ||||
|     }, | ||||
| @ -263,9 +269,6 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   async mounted () { | ||||
|     // if (!this.$route.params.id) { | ||||
|     //   this.$refs.baseSelect.$refs.search.focus() | ||||
|     // } | ||||
|     this.$nextTick(() => { | ||||
|       this.loadData() | ||||
|       if (this.$route.params.id && !this.isEdit) { | ||||
| @ -283,6 +286,9 @@ export default { | ||||
|       'updatePayment', | ||||
|       'fetchPayment' | ||||
|     ]), | ||||
|     invoiceWithAmount ({ invoice_number, due_amount }) { | ||||
|       return `${invoice_number} (${this.$utils.formatGraphMoney(due_amount, this.customer.currency)})` | ||||
|     }, | ||||
|     async loadData () { | ||||
|       if (this.isEdit) { | ||||
|         let response = await this.fetchPayment(this.$route.params.id) | ||||
| @ -291,7 +297,6 @@ export default { | ||||
|         this.customer = response.data.payment.user | ||||
|         this.formData.payment_date = moment(response.data.payment.payment_date, 'YYYY-MM-DD').toString() | ||||
|         this.formData.amount = parseFloat(response.data.payment.amount) | ||||
|         this.maxPayableAmount = response.data.payment.amount | ||||
|         if (response.data.payment.invoice !== null) { | ||||
|           this.maxPayableAmount = parseInt(response.data.payment.amount) + parseInt(response.data.payment.invoice.due_amount) | ||||
|           this.invoice = response.data.payment.invoice | ||||
|  | ||||
| @ -215,15 +215,14 @@ | ||||
|         </table-column> | ||||
|       </table-component> | ||||
|     </div> | ||||
|  | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import { mapActions, mapGetters } from 'vuex' | ||||
| import { SweetModal, SweetModalTab } from 'sweet-modal-vue' | ||||
| import CapsuleIcon from '../../components/icon/CapsuleIcon' | ||||
| import BaseButton from '../../../js/components/base/BaseButton' | ||||
| import { request } from 'http' | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|  | ||||
| @ -4,13 +4,6 @@ | ||||
|       <div class="row"> | ||||
|         <div class="col-md-8"> | ||||
|           <label class="report-label">{{ $t('reports.sales.date_range') }}</label> | ||||
|           <!-- <base-date-picker | ||||
|             v-model="range" | ||||
|             :invalid="$v.range.$error" | ||||
|             format="yyyy" | ||||
|             minimum-view="year" | ||||
|             @change="$v.range.$touch()" | ||||
|           /> --> | ||||
|           <base-select | ||||
|             v-model="selectedRange" | ||||
|             :options="dateRange" | ||||
|  | ||||
| @ -52,6 +52,7 @@ | ||||
|     </transition> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   watch: { | ||||
|  | ||||
| @ -12,6 +12,9 @@ | ||||
|           <div class="col-md-6"> | ||||
|             <label class="input-label">{{ $tc('settings.company_info.company_logo') }}</label> | ||||
|             <div id="pick-avatar" class="image-upload-box"> | ||||
|               <div class="overlay"> | ||||
|                 <font-awesome-icon class="white-icon" icon="camera"/> | ||||
|               </div> | ||||
|               <img v-if="previewLogo" :src="previewLogo" class="preview-logo"> | ||||
|               <div v-else class="upload-content"> | ||||
|                 <font-awesome-icon class="upload-icon" icon="cloud-upload-alt"/> | ||||
| @ -69,37 +72,22 @@ | ||||
|           </div> | ||||
|           <div class="col-md-6 mb-4"> | ||||
|             <label class="input-label">{{ $tc('settings.company_info.state') }}</label> | ||||
|             <base-select | ||||
|               v-model="state" | ||||
|               :options="states" | ||||
|               :searchable="true" | ||||
|               :disabled="isDisabledState" | ||||
|               :show-labels="false" | ||||
|               :placeholder="$t('general.select_state')" | ||||
|               label="name" | ||||
|               track-by="id" | ||||
|             <base-input | ||||
|               v-model="formData.state" | ||||
|               :placeholder="$tc('settings.company_info.state')" | ||||
|               name="state" | ||||
|               type="text" | ||||
|             /> | ||||
|           </div> | ||||
|           <div class="col-md-6 mb-4"> | ||||
|             <label class="input-label">{{ $tc('settings.company_info.city') }}</label> | ||||
|             <base-select | ||||
|               v-model="city" | ||||
|               :options="cities" | ||||
|               :searchable="true" | ||||
|               :show-labels="false" | ||||
|               :disabled="isDisabledCity" | ||||
|               :placeholder="$t('general.select_city')" | ||||
|               label="name" | ||||
|               track-by="id" | ||||
|             <base-input | ||||
|               v-model="formData.city" | ||||
|               :placeholder="$tc('settings.company_info.city')" | ||||
|               name="city" | ||||
|               type="text" | ||||
|             /> | ||||
|           </div> | ||||
|           <!-- <div class="col-md-6 mb-3"> | ||||
|             <label class="input-label">Website</label> | ||||
|             <base-input | ||||
|               v-model="formData.website" | ||||
|               placeholder="Website" | ||||
|             /> | ||||
|           </div> --> | ||||
|           <div class="col-md-6 mb-4"> | ||||
|             <label class="input-label">{{ $tc('settings.company_info.zip') }}</label> | ||||
|             <base-input | ||||
| @ -154,7 +142,7 @@ import ImageBox from '../components/ImageBox.vue' | ||||
| import AvatarCropper from 'vue-avatar-cropper' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| import { mapActions } from 'vuex' | ||||
| const { required, email, numeric, maxLength } = require('vuelidate/lib/validators') | ||||
| const { required, email, maxLength } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { AvatarCropper, IconUpload, ImageBox }, | ||||
| @ -174,7 +162,6 @@ export default { | ||||
|       isFetchingData: false, | ||||
|       formData: { | ||||
|         name: null, | ||||
|         logo: '', | ||||
|         email: '', | ||||
|         phone: '', | ||||
|         zip: '', | ||||
| @ -182,20 +169,14 @@ export default { | ||||
|         address_street_2: '', | ||||
|         website: '', | ||||
|         country_id: null, | ||||
|         state_id: '', | ||||
|         city_id: '' | ||||
|         state: '', | ||||
|         city: '' | ||||
|       }, | ||||
|       isLoading: false, | ||||
|       isHidden: false, | ||||
|       country: null, | ||||
|       previewLogo: null, | ||||
|       city: null, | ||||
|       state: null, | ||||
|       countries: [], | ||||
|       isDisabledState: true, | ||||
|       isDisabledCity: true, | ||||
|       states: [], | ||||
|       cities: [], | ||||
|       passData: [], | ||||
|       fileSendUrl: '/api/settings/company', | ||||
|       fileObject: null | ||||
| @ -204,44 +185,9 @@ export default { | ||||
|   watch: { | ||||
|     country (newCountry) { | ||||
|       this.formData.country_id = newCountry.id | ||||
|       if (this.formData.country_id) { | ||||
|         this.isDisabledState = false | ||||
|       } | ||||
|       this.fetchState() | ||||
|       if (this.isFetchingData) { | ||||
|         return true | ||||
|       } | ||||
|  | ||||
|       this.state = null | ||||
|       this.city = null | ||||
|     }, | ||||
|     state (newState) { | ||||
|       if (newState !== null && newState !== undefined) { | ||||
|         this.formData.state_id = newState.id | ||||
|         this.fetchCities() | ||||
|         this.isDisabledCity = false | ||||
|  | ||||
|         if (this.isFetchingData) { | ||||
|           this.isFetchingData = false | ||||
|           return true | ||||
|         } | ||||
|         this.city = null | ||||
|         return true | ||||
|       } | ||||
|       // this.formData.state_id = null | ||||
|       this.cities = [] | ||||
|       this.city = null | ||||
|       // this.formData.city_id = null | ||||
|       this.isDisabledCity = true | ||||
|       return true | ||||
|     }, | ||||
|     city (newCity) { | ||||
|       if (newCity !== null && newCity !== undefined) { | ||||
|         this.formData.city_id = newCity.id | ||||
|         return true | ||||
|       } | ||||
|       // this.formData.city_id = null | ||||
|       // return true | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
| @ -290,9 +236,9 @@ export default { | ||||
|       this.formData.address_street_2 = response.data.user.addresses[0].address_street_2 | ||||
|       this.formData.zip = response.data.user.addresses[0].zip | ||||
|       this.formData.phone = response.data.user.addresses[0].phone | ||||
|       this.formData.state = response.data.user.addresses[0].state | ||||
|       this.formData.city = response.data.user.addresses[0].city | ||||
|       this.country = response.data.user.addresses[0].country | ||||
|       this.state = response.data.user.addresses[0].state | ||||
|       this.city = response.data.user.addresses[0].city | ||||
|       this.previewLogo = response.data.user.company.logo | ||||
|     }, | ||||
|     async updateCompany () { | ||||
| @ -301,17 +247,8 @@ export default { | ||||
|         return true | ||||
|       } | ||||
|       this.isLoading = true | ||||
|       let data = new FormData() | ||||
|       data.append('name', this.formData.name) | ||||
|       data.append('address_street_1', this.formData.address_street_1) | ||||
|       data.append('address_street_2', this.formData.address_street_2) | ||||
|       data.append('city_id', this.formData.city_id) | ||||
|       data.append('state_id', this.formData.state_id) | ||||
|       data.append('country_id', this.formData.country_id) | ||||
|       data.append('zip', this.formData.zip) | ||||
|       data.append('phone', this.formData.phone) | ||||
|  | ||||
|       let response = await this.editCompany(data) | ||||
|       let response = await this.editCompany(this.formData) | ||||
|       if (response.data.success) { | ||||
|         this.isLoading = false | ||||
|         if (this.fileObject && this.previewLogo) { | ||||
| @ -335,19 +272,6 @@ export default { | ||||
|       if (res) { | ||||
|         this.countries = res.data.countries | ||||
|       } | ||||
|     }, | ||||
|     async fetchState () { | ||||
|       this.$v.formData.country_id.$touch() | ||||
|       let res = await window.axios.get(`/api/states/${this.country.id}`) | ||||
|       if (res) { | ||||
|         this.states = res.data.states | ||||
|       } | ||||
|     }, | ||||
|     async fetchCities () { | ||||
|       let res = await window.axios.get(`/api/cities/${this.state.id}`) | ||||
|       if (res) { | ||||
|         this.cities = res.data.cities | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -17,9 +17,7 @@ | ||||
|           <h3 class="page-title mb-3">{{ $t('settings.update_app.avail_update') }}</h3> | ||||
|           <label class="input-label">{{ $t('settings.update_app.next_version') }}</label><br> | ||||
|           <label class="version">{{ updateData.version }}</label> | ||||
|           <p class="page-sub-title"> | ||||
|             {{ description }} | ||||
|           </p> | ||||
|           <p class="page-sub-title" style="white-space: pre-wrap;">{{ description }}</p> | ||||
|           <base-button size="large" icon="rocket" color="theme" @click="onUpdateApp"> | ||||
|             {{ $t('settings.update_app.update') }} | ||||
|           </base-button> | ||||
| @ -55,13 +53,22 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   created () { | ||||
|     window.addEventListener('beforeunload', (event) => { | ||||
|       if (this.isUpdating) { | ||||
|         event.returnValue = 'Update is in progress!' | ||||
|       } | ||||
|     }) | ||||
|   }, | ||||
|   mounted () { | ||||
|     window.axios.get('/api/settings/app/version').then((res) => { | ||||
|       this.currentVersion = res.data.version | ||||
|     }) | ||||
|   }, | ||||
|   methods: { | ||||
|     closeHandler () { | ||||
|       console.log('closing') | ||||
|     }, | ||||
|     async onUpdateApp () { | ||||
|       try { | ||||
|         this.isUpdating = true | ||||
| @ -69,10 +76,17 @@ export default { | ||||
|         let res = await window.axios.post('/api/update', this.updateData) | ||||
|  | ||||
|         if (res.data.success) { | ||||
|           await window.axios.post('/api/update/finish', this.updateData) | ||||
|           this.isUpdateAvailable = false | ||||
|           window.toastr['success'](this.$t('settings.update_app.update_success')) | ||||
|           this.currentVersion = this.updateData.version | ||||
|           setTimeout(async () => { | ||||
|             await window.axios.post('/api/update/finish', this.updateData) | ||||
|  | ||||
|             window.toastr['success'](this.$t('settings.update_app.update_success')) | ||||
|             this.currentVersion = this.updateData.version | ||||
|             this.isUpdateAvailable = false | ||||
|  | ||||
|             setTimeout(() => { | ||||
|               location.reload() | ||||
|             }, 2000) | ||||
|           }, 1000) | ||||
|         } else { | ||||
|           console.log(res.data) | ||||
|           window.toastr['error'](res.data.error) | ||||
|  | ||||
| @ -8,6 +8,31 @@ | ||||
|             {{ $t('settings.account_settings.section_description') }} | ||||
|           </p> | ||||
|         </div> | ||||
|         <div class="row mb-4"> | ||||
|           <div class="col-md-6"> | ||||
|             <label class="input-label">{{ $tc('settings.account_settings.profile_picture') }}</label> | ||||
|             <div id="pick-avatar" class="image-upload-box avatar-upload"> | ||||
|               <div class="overlay"> | ||||
|                 <font-awesome-icon class="white-icon" icon="camera"/> | ||||
|               </div> | ||||
|               <img v-if="previewAvatar" :src="previewAvatar" class="preview-logo"> | ||||
|               <div v-if="!previewAvatar" class="upload-content"> | ||||
|                 <font-awesome-icon class="upload-icon" icon="cloud-upload-alt"/> | ||||
|                 <p class="upload-text"> {{ $tc('general.choose_file') }} </p> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|           <avatar-cropper | ||||
|             :labels="{ submit: 'submit', cancel: 'Cancle'}" | ||||
|             :cropper-options="cropperOptions" | ||||
|             :output-options="cropperOutputOptions" | ||||
|             :output-quality="0.8" | ||||
|             :upload-handler="cropperHandler" | ||||
|             trigger="#pick-avatar" | ||||
|             @changed="setFileObject" | ||||
|             @error="handleUploadError" | ||||
|           /> | ||||
|         </div> | ||||
|         <div class="row"> | ||||
|           <div class="col-md-6 mb-4 form-group"> | ||||
|             <label class="input-label">{{ $tc('settings.account_settings.name') }}</label> | ||||
| @ -81,19 +106,33 @@ | ||||
| <script> | ||||
| import { validationMixin } from 'vuelidate' | ||||
| import { mapActions } from 'vuex' | ||||
| import AvatarCropper from 'vue-avatar-cropper' | ||||
| const { required, requiredIf, sameAs, email, minLength } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { AvatarCropper }, | ||||
|   mixins: [validationMixin], | ||||
|   data () { | ||||
|     return { | ||||
|       isLoading: false, | ||||
|       cropperOutputOptions: { | ||||
|         width: 150, | ||||
|         height: 150 | ||||
|       }, | ||||
|       cropperOptions: { | ||||
|         autoCropArea: 1, | ||||
|         viewMode: 0, | ||||
|         movable: true, | ||||
|         zoomable: true | ||||
|       }, | ||||
|       formData: { | ||||
|         name: null, | ||||
|         email: null, | ||||
|         password: null, | ||||
|         confirm_password: null | ||||
|       } | ||||
|       }, | ||||
|       isLoading: false, | ||||
|       previewAvatar: null, | ||||
|       fileObject: null | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
| @ -128,12 +167,27 @@ export default { | ||||
|   methods: { | ||||
|     ...mapActions('userProfile', [ | ||||
|       'loadData', | ||||
|       'editUser' | ||||
|       'editUser', | ||||
|       'uploadAvatar' | ||||
|     ]), | ||||
|     cropperHandler (cropper) { | ||||
|       this.previewAvatar = cropper.getCroppedCanvas().toDataURL(this.cropperOutputMime) | ||||
|     }, | ||||
|     setFileObject (file) { | ||||
|       this.fileObject = file | ||||
|     }, | ||||
|     handleUploadError (message, type, xhr) { | ||||
|       window.toastr['error']('Oops! Something went wrong...') | ||||
|     }, | ||||
|     async setInitialData () { | ||||
|       let response = await this.loadData() | ||||
|       this.formData.name = response.data.name | ||||
|       this.formData.email = response.data.email | ||||
|       if (response.data.avatar) { | ||||
|         this.previewAvatar = response.data.avatar | ||||
|       } else { | ||||
|         this.previewAvatar = '/images/default-avatar.jpg' | ||||
|       } | ||||
|     }, | ||||
|     async updateUserData () { | ||||
|       this.$v.formData.$touch() | ||||
| @ -151,6 +205,14 @@ export default { | ||||
|       let response = await this.editUser(data) | ||||
|       if (response.data.success) { | ||||
|         this.isLoading = false | ||||
|         if (this.fileObject && this.previewAvatar) { | ||||
|           let avatarData = new FormData() | ||||
|           avatarData.append('admin_avatar', JSON.stringify({ | ||||
|             name: this.fileObject.name, | ||||
|             data: this.previewAvatar | ||||
|           })) | ||||
|           this.uploadAvatar(avatarData) | ||||
|         } | ||||
|         window.toastr['success'](this.$t('settings.account_settings.updated_message')) | ||||
|         return true | ||||
|       } | ||||
|  | ||||
| @ -7,6 +7,9 @@ | ||||
|         <div class="col-md-6"> | ||||
|           <label class="input-label">{{ $tc('settings.company_info.company_logo') }}</label> | ||||
|           <div id="pick-avatar" class="image-upload-box"> | ||||
|             <div class="overlay"> | ||||
|               <font-awesome-icon class="white-icon" icon="camera"/> | ||||
|             </div> | ||||
|             <img v-if="previewLogo" :src="previewLogo" class="preview-logo"> | ||||
|             <div v-else class="upload-content"> | ||||
|               <font-awesome-icon class="upload-icon" icon="cloud-upload-alt"/> | ||||
| @ -61,29 +64,18 @@ | ||||
|       <div class="row"> | ||||
|         <div class="col-md-6"> | ||||
|           <label class="form-label">{{ $t('wizard.state') }}</label> | ||||
|           <base-select | ||||
|             v-model="state" | ||||
|             :options="states" | ||||
|             :searchable="true" | ||||
|             :show-labels="false" | ||||
|             :disabled="isDisabledState" | ||||
|             :placeholder="$t('general.select_state')" | ||||
|             track-by="id" | ||||
|             label="name" | ||||
|             @input="fetchCities" | ||||
|           <base-input | ||||
|             v-model="companyData.state" | ||||
|             name="state" | ||||
|             type="text" | ||||
|           /> | ||||
|         </div> | ||||
|         <div class="col-md-6"> | ||||
|           <label class="form-label">{{ $t('wizard.city') }}</label> | ||||
|           <base-select | ||||
|             v-model="city" | ||||
|             :options="cities" | ||||
|             :searchable="true" | ||||
|             :show-labels="false" | ||||
|             :disabled="isDisabledCity" | ||||
|             :placeholder="$t('general.select_city')" | ||||
|             track-by="id" | ||||
|             label="name" | ||||
|           <base-input | ||||
|             v-model="companyData.city" | ||||
|             name="city" | ||||
|             type="text" | ||||
|           /> | ||||
|         </div> | ||||
|       </div> | ||||
| @ -177,8 +169,8 @@ export default { | ||||
|         name: null, | ||||
|         address_street_1: '', | ||||
|         address_street_2: '', | ||||
|         city_id: '', | ||||
|         state_id: '', | ||||
|         city: '', | ||||
|         state: '', | ||||
|         country_id: '', | ||||
|         zip: '', | ||||
|         phone: '' | ||||
| @ -187,13 +179,7 @@ export default { | ||||
|       step: 1, | ||||
|       countries: [], | ||||
|       country: null, | ||||
|       states: [], | ||||
|       state: null, | ||||
|       cities: [], | ||||
|       city: null, | ||||
|       previewLogo: null, | ||||
|       isDisabledCity: true, | ||||
|       isDisabledState: true | ||||
|       previewLogo: null | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
| @ -215,35 +201,6 @@ export default { | ||||
|   watch: { | ||||
|     country ({ id }) { | ||||
|       this.companyData.country_id = id | ||||
|       this.state = null | ||||
|       this.city = null | ||||
|       if (id !== null && id !== undefined) { | ||||
|         this.isDisabledState = false | ||||
|         return true | ||||
|       } | ||||
|       this.isDisabledState = true | ||||
|       return true | ||||
|     }, | ||||
|     state (newState) { | ||||
|       if (newState !== null && newState !== undefined) { | ||||
|         this.city = null | ||||
|         this.companyData.state_id = newState.id | ||||
|         this.isDisabledCity = false | ||||
|         return true | ||||
|       } | ||||
|       this.companyData.state_id = null | ||||
|       this.isDisabledCity = true | ||||
|       this.cities = [] | ||||
|       this.city = null | ||||
|       this.companyData.city_id = null | ||||
|       return true | ||||
|     }, | ||||
|     city (newCity) { | ||||
|       if (newCity !== null && newCity !== undefined) { | ||||
|         this.companyData.city_id = newCity.id | ||||
|         return true | ||||
|       } | ||||
|       this.companyData.city_id = null | ||||
|       return true | ||||
|     } | ||||
|   }, | ||||
| @ -304,22 +261,6 @@ export default { | ||||
|       if (res) { | ||||
|         this.countries = res.data.countries | ||||
|       } | ||||
|     }, | ||||
|     async fetchState () { | ||||
|       this.$v.companyData.country_id.$touch() | ||||
|       let res = await window.axios.get(`/api/states/${this.country.id}`) | ||||
|       if (res) { | ||||
|         this.states = res.data.states | ||||
|       } | ||||
|     }, | ||||
|     async fetchCities () { | ||||
|       if (this.state === null || this.state === undefined) { | ||||
|         return false | ||||
|       } | ||||
|       let res = await window.axios.get(`/api/cities/${this.state.id}`) | ||||
|       if (res) { | ||||
|         this.cities = res.data.cities | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -18,7 +18,7 @@ | ||||
|             <span v-if="!$v.databaseData.app_url.required" class="text-danger"> | ||||
|               {{ $tc('validation.required') }} | ||||
|             </span> | ||||
|             <span v-if="!$v.databaseData.app_url.url" class="text-danger"> | ||||
|             <span v-if="!$v.databaseData.app_url.isUrl" class="text-danger"> | ||||
|               {{ $tc('validation.invalid_url') }} | ||||
|             </span> | ||||
|           </div> | ||||
| @ -184,7 +184,9 @@ export default { | ||||
|       }, | ||||
|       app_url: { | ||||
|         required, | ||||
|         url | ||||
|         isUrl (val) { | ||||
|           return this.$utils.checkValidUrl(val) | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
| @ -204,10 +206,10 @@ export default { | ||||
|         } else { | ||||
|           window.toastr['error'](this.$t('wizard.errors.' + response.data.error)) | ||||
|         } | ||||
|         this.loading = false | ||||
|       } catch (e) { | ||||
|         console.log(e.response) | ||||
|         window.toastr['error'](e.response.data.message) | ||||
|       } finally { | ||||
|         this.loading = false | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @ -22,7 +22,7 @@ | ||||
|       </div> | ||||
|     </div> | ||||
|     <base-button | ||||
|       v-if="!errors" | ||||
|       v-if="isContinue" | ||||
|       class="pull-right mt-5" | ||||
|       icon="arrow-right" | ||||
|       right-icon | ||||
| @ -39,7 +39,8 @@ export default { | ||||
|     return { | ||||
|       loading: false, | ||||
|       permissions: [], | ||||
|       errors: false | ||||
|       errors: false, | ||||
|       isContinue: false | ||||
|     } | ||||
|   }, | ||||
|   created () { | ||||
| @ -54,6 +55,24 @@ export default { | ||||
|       if (response.data) { | ||||
|         this.permissions = response.data.permissions.permissions | ||||
|         this.errors = response.data.permissions.errors | ||||
|         let self = this | ||||
|  | ||||
|         if (this.errors) { | ||||
|           swal({ | ||||
|             title: this.$t('wizard.permissions.permission_confirm_title'), | ||||
|             text: this.$t('wizard.permissions.permission_confirm_desc'), | ||||
|             icon: 'warning', | ||||
|             buttons: true, | ||||
|             dangerMode: true | ||||
|           }).then(async (willConfirm) => { | ||||
|             if (willConfirm) { | ||||
|               self.isContinue = true | ||||
|             } | ||||
|           }) | ||||
|         } else { | ||||
|           this.isContinue = true | ||||
|         } | ||||
|  | ||||
|         this.loading = false | ||||
|       } | ||||
|     }, | ||||
|  | ||||
| @ -3,6 +3,31 @@ | ||||
|     <form action="" @submit.prevent="next()"> | ||||
|       <p class="form-title">{{ $t('wizard.account_info') }}</p> | ||||
|       <p class="form-desc">{{ $t('wizard.account_info_desc') }}</p> | ||||
|       <div class="row mb-4"> | ||||
|         <div class="col-md-6"> | ||||
|           <label class="form-label">{{ $tc('settings.account_settings.profile_picture') }}</label> | ||||
|           <div id="pick-avatar" class="image-upload-box avatar-upload"> | ||||
|             <div class="overlay"> | ||||
|               <font-awesome-icon class="white-icon" icon="camera"/> | ||||
|             </div> | ||||
|             <img v-if="previewAvatar" :src="previewAvatar" class="preview-logo"> | ||||
|             <div v-else class="upload-content"> | ||||
|               <font-awesome-icon class="upload-icon" icon="cloud-upload-alt"/> | ||||
|               <p class="upload-text"> {{ $tc('general.choose_file') }} </p> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <avatar-cropper | ||||
|           :labels="{ submit: 'submit', cancel: 'Cancle'}" | ||||
|           :cropper-options="cropperOptions" | ||||
|           :output-options="cropperOutputOptions" | ||||
|           :output-quality="0.8" | ||||
|           :upload-handler="cropperHandler" | ||||
|           trigger="#pick-avatar" | ||||
|           @changed="setFileObject" | ||||
|           @error="handleUploadError" | ||||
|         /> | ||||
|       </div> | ||||
|       <div class="row"> | ||||
|         <div class="col-md-6"> | ||||
|           <label class="form-label">{{ $t('wizard.name') }}</label><span class="text-danger"> *</span> | ||||
| @ -75,24 +100,37 @@ | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
| import MultiSelect from 'vue-multiselect' | ||||
| import AvatarCropper from 'vue-avatar-cropper' | ||||
| import { validationMixin } from 'vuelidate' | ||||
| import { mapActions } from 'vuex' | ||||
| const { required, requiredIf, sameAs, minLength, email } = require('vuelidate/lib/validators') | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     MultiSelect | ||||
|     AvatarCropper | ||||
|   }, | ||||
|   mixins: [validationMixin], | ||||
|   data () { | ||||
|     return { | ||||
|       cropperOutputOptions: { | ||||
|         width: 150, | ||||
|         height: 150 | ||||
|       }, | ||||
|       cropperOptions: { | ||||
|         autoCropArea: 1, | ||||
|         viewMode: 0, | ||||
|         movable: true, | ||||
|         zoomable: true | ||||
|       }, | ||||
|       profileData: { | ||||
|         name: null, | ||||
|         email: null, | ||||
|         password: null, | ||||
|         confirm_password: null | ||||
|       }, | ||||
|       loading: false | ||||
|       loading: false, | ||||
|       previewAvatar: '/images/default-avatar.jpg', | ||||
|       fileObject: null | ||||
|     } | ||||
|   }, | ||||
|   validations: { | ||||
| @ -124,6 +162,18 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     ...mapActions('userProfile', [ | ||||
|       'uploadOnboardAvatar' | ||||
|     ]), | ||||
|     cropperHandler (cropper) { | ||||
|       this.previewAvatar = cropper.getCroppedCanvas().toDataURL(this.cropperOutputMime) | ||||
|     }, | ||||
|     setFileObject (file) { | ||||
|       this.fileObject = file | ||||
|     }, | ||||
|     handleUploadError (message, type, xhr) { | ||||
|       window.toastr['error']('Oops! Something went wrong...') | ||||
|     }, | ||||
|     async next () { | ||||
|       this.$v.profileData.$touch() | ||||
|       if (this.$v.profileData.$invalid) { | ||||
| @ -131,7 +181,19 @@ export default { | ||||
|       } | ||||
|       this.loading = true | ||||
|       let response = await window.axios.post('/api/admin/onboarding/profile', this.profileData) | ||||
|       console.log('user_id', response.data.user.id) | ||||
|  | ||||
|       if (response.data) { | ||||
|         if (this.fileObject && this.previewAvatar) { | ||||
|           let avatarData = new FormData() | ||||
|           avatarData.append('admin_avatar', JSON.stringify({ | ||||
|             name: this.fileObject.name, | ||||
|             data: this.previewAvatar, | ||||
|             id: response.data.user.id | ||||
|           })) | ||||
|  | ||||
|           this.uploadOnboardAvatar(avatarData) | ||||
|         } | ||||
|         this.$emit('next') | ||||
|         this.loading = false | ||||
|       } | ||||
|  | ||||
| @ -53,7 +53,8 @@ import { | ||||
|   faPaperPlane, | ||||
|   faEyeSlash, | ||||
|   faSyncAlt, | ||||
|   faRocket | ||||
|   faRocket, | ||||
|   faCamera | ||||
| } from '@fortawesome/free-solid-svg-icons' | ||||
| import { far } from '@fortawesome/free-regular-svg-icons' | ||||
| import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome' | ||||
| @ -117,7 +118,8 @@ library.add( | ||||
|   faCopy, | ||||
|   faPaperPlane, | ||||
|   faSyncAlt, | ||||
|   faRocket | ||||
|   faRocket, | ||||
|   faCamera | ||||
| ) | ||||
|  | ||||
| Vue.component('font-awesome-icon', FontAwesomeIcon) | ||||
|  | ||||
| @ -11,8 +11,10 @@ | ||||
|     cursor: pointer; | ||||
|  | ||||
|     .preview-logo { | ||||
|         max-height: 50%; | ||||
|         max-height: 80%; | ||||
|         position: absolute; | ||||
|         opacity: 1; | ||||
|         animation: fadeIn 2s ease; | ||||
|     } | ||||
|  | ||||
|     .upload-content { | ||||
| @ -35,4 +37,51 @@ | ||||
|         margin-bottom: 10px; | ||||
|     } | ||||
|  | ||||
|     .white-icon { | ||||
|         font-size: 30px; | ||||
|         line-height: 23px; | ||||
|         color: $white; | ||||
|         margin-bottom: 10px; | ||||
|     } | ||||
|  | ||||
|     .overlay { | ||||
|         position: absolute; | ||||
|         display: flex; | ||||
|         justify-content: center; | ||||
|         align-items: center; | ||||
|         top: 0; | ||||
|         left: 0; | ||||
|         width: 100%; | ||||
|         height: 100%; | ||||
|         z-index: 10; | ||||
|         transition: .5s ease; | ||||
|         background-color: rgba(0,0,0,0.5); | ||||
|         opacity: 0; | ||||
|     } | ||||
|  | ||||
|     &:hover { | ||||
|         .overlay { | ||||
|             opacity: 1; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| .avatar-upload { | ||||
|     height: 130px; | ||||
|     width: 130px; | ||||
|     .preview-logo { | ||||
|         max-width: 80% !important; | ||||
|     } | ||||
|  | ||||
|     @keyframes fadeIn{ | ||||
|       0%{ | ||||
|         opacity: 0; | ||||
|       } | ||||
|       100%{ | ||||
|         opacity: 1; | ||||
|       } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -351,7 +351,8 @@ fieldset[disabled] .multiselect { | ||||
|     color: $ls-color-gray; | ||||
| } | ||||
|  | ||||
| .multiselect--disabled .multiselect__input { | ||||
| .multiselect--disabled .multiselect__input, | ||||
| .multiselect--disabled .multiselect__single { | ||||
|     background: $ls-color-gray--light; | ||||
|     color: $ls-color-gray; | ||||
| } | ||||
|  | ||||
							
								
								
									
										1
									
								
								resources/assets/sass/partials/header.scss
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								resources/assets/sass/partials/header.scss
									
									
									
									
										vendored
									
									
								
							| @ -62,6 +62,7 @@ | ||||
|  | ||||
|     .avatar img { | ||||
|         width: 36px; | ||||
|         height: 36px; | ||||
|         border-radius: 2px; | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -16,12 +16,12 @@ | ||||
|             {{$estimate->user->billingaddress->address_street_2}}<br> | ||||
|         @endif | ||||
|  | ||||
|         @if($estimate->user->billingaddress->city && $estimate->user->billingaddress->city->name) | ||||
|             {{$estimate->user->billingaddress->city->name}}, | ||||
|         @if($estimate->user->billingaddress->city && $estimate->user->billingaddress->city) | ||||
|             {{$estimate->user->billingaddress->city}}, | ||||
|         @endif | ||||
|  | ||||
|         @if($estimate->user->billingaddress->state && $estimate->user->billingaddress->state->name) | ||||
|             {{$estimate->user->billingaddress->state->name}}. | ||||
|         @if($estimate->user->billingaddress->state && $estimate->user->billingaddress->state) | ||||
|             {{$estimate->user->billingaddress->state}}. | ||||
|         @endif | ||||
|  | ||||
|         @if($estimate->user->billingaddress->zip) | ||||
|  | ||||
| @ -12,10 +12,10 @@ | ||||
|             {{$company_address->addresses[0]['address_street_2']}} <br> | ||||
|         @endif | ||||
|         @if($company_address->addresses[0]['city']) | ||||
|             {{$company_address->addresses[0]['city']->name}} | ||||
|             {{$company_address->addresses[0]['city']}} | ||||
|         @endif | ||||
|         @if($company_address->addresses[0]['state']) | ||||
|             {{$company_address->addresses[0]['state']->name}} | ||||
|             {{$company_address->addresses[0]['state']}} | ||||
|         @endif | ||||
|         @if($company_address->addresses[0]['zip']) | ||||
|             {{$company_address->addresses[0]['zip']}} <br> | ||||
|  | ||||
| @ -16,12 +16,12 @@ | ||||
|             {{$estimate->user->shippingaddress->address_street_2}}<br> | ||||
|         @endif | ||||
|  | ||||
|         @if($estimate->user->shippingaddress->city && $estimate->user->shippingaddress->city->name) | ||||
|             {{$estimate->user->shippingaddress->city->name}}, | ||||
|         @if($estimate->user->shippingaddress->city && $estimate->user->shippingaddress->city) | ||||
|             {{$estimate->user->shippingaddress->city}}, | ||||
|         @endif | ||||
|  | ||||
|         @if($estimate->user->shippingaddress->state && $estimate->user->shippingaddress->state->name) | ||||
|             {{$estimate->user->shippingaddress->state->name}}. | ||||
|         @if($estimate->user->shippingaddress->state && $estimate->user->shippingaddress->state) | ||||
|             {{$estimate->user->shippingaddress->state}}. | ||||
|         @endif | ||||
|  | ||||
|         @if($estimate->user->shippingaddress->zip) | ||||
|  | ||||
| @ -14,11 +14,11 @@ | ||||
|         @if($invoice->user->billingaddress->address_street_2) | ||||
|             {{$invoice->user->billingaddress->address_street_2}}<br> | ||||
|         @endif | ||||
|         @if($invoice->user->billingaddress->city && $invoice->user->billingaddress->city->name) | ||||
|             {{$invoice->user->billingaddress->city->name}}, | ||||
|         @if($invoice->user->billingaddress->city && $invoice->user->billingaddress->city) | ||||
|             {{$invoice->user->billingaddress->city}}, | ||||
|         @endif | ||||
|         @if($invoice->user->billingaddress->state && $invoice->user->billingaddress->state->name) | ||||
|             {{$invoice->user->billingaddress->state->name}}. | ||||
|         @if($invoice->user->billingaddress->state && $invoice->user->billingaddress->state) | ||||
|             {{$invoice->user->billingaddress->state}}. | ||||
|         @endif | ||||
|         @if($invoice->user->billingaddress->zip) | ||||
|             {{$invoice->user->billingaddress->zip}}<br> | ||||
|  | ||||
| @ -12,10 +12,10 @@ | ||||
|             {{$company_address->addresses[0]['address_street_2']}} <br> | ||||
|         @endif | ||||
|         @if($company_address->addresses[0]['city']) | ||||
|             {{$company_address->addresses[0]['city']->name}} | ||||
|             {{$company_address->addresses[0]['city']}} | ||||
|         @endif | ||||
|         @if($company_address->addresses[0]['state']) | ||||
|             {{$company_address->addresses[0]['state']->name}} | ||||
|             {{$company_address->addresses[0]['state']}} | ||||
|         @endif | ||||
|         @if($company_address->addresses[0]['zip']) | ||||
|             {{$company_address->addresses[0]['zip']}} <br> | ||||
|  | ||||
| @ -16,12 +16,12 @@ | ||||
|             {{$invoice->user->shippingaddress->address_street_2}}<br> | ||||
|         @endif | ||||
|  | ||||
|         @if($invoice->user->shippingaddress->city && $invoice->user->shippingaddress->city->name) | ||||
|             {{$invoice->user->shippingaddress->city->name}}, | ||||
|         @if($invoice->user->shippingaddress->city && $invoice->user->shippingaddress->city) | ||||
|             {{$invoice->user->shippingaddress->city}}, | ||||
|         @endif | ||||
|  | ||||
|         @if($invoice->user->shippingaddress->state && $invoice->user->shippingaddress->state->name) | ||||
|             {{$invoice->user->shippingaddress->state->name}}. | ||||
|         @if($invoice->user->shippingaddress->state && $invoice->user->shippingaddress->state) | ||||
|             {{$invoice->user->shippingaddress->state}}. | ||||
|         @endif | ||||
|  | ||||
|         @if($invoice->user->shippingaddress->zip) | ||||
|  | ||||
| @ -222,7 +222,7 @@ | ||||
|                     <table class="expenses-table"> | ||||
|                         <tr> | ||||
|                             <td> | ||||
|                                 <p class="expense-title">{{ $item->item->name }}</p> | ||||
|                                 <p class="expense-title">{{ $item->name }}</p> | ||||
|                             </td> | ||||
|                             <td> | ||||
|                                 <p class="expense-money">{!! format_money_pdf($item->total_amount) !!}</p> | ||||
|  | ||||
| @ -96,6 +96,11 @@ Route::group(['middleware' => 'redirect-if-installed'], function () { | ||||
|         'uses' => 'OnboardingController@adminProfile' | ||||
|     ]); | ||||
|  | ||||
|     Route::post('/admin/profile/upload-avatar', [ | ||||
|         'as' => 'admin.on_boarding.avatar', | ||||
|         'uses' => 'OnboardingController@uploadAdminAvatar' | ||||
|     ]); | ||||
|  | ||||
|     Route::post('/admin/onboarding/company', [ | ||||
|         'as' => 'admin.company', | ||||
|         'uses' => 'OnboardingController@adminCompany' | ||||
| @ -308,6 +313,11 @@ Route::group(['middleware' => 'api'], function () { | ||||
|                 'uses' => 'CompanyController@updateAdminProfile' | ||||
|             ]); | ||||
|  | ||||
|             Route::post('/profile/upload-avatar', [ | ||||
|                 'as' => 'admin.profile.avatar', | ||||
|                 'uses' => 'CompanyController@uploadAdminAvatar' | ||||
|             ]); | ||||
|  | ||||
|             Route::post('/company/upload-logo', [ | ||||
|                 'as' => 'upload.admin.company.logo', | ||||
|                 'uses' => 'CompanyController@uploadCompanyLogo' | ||||
|  | ||||
| @ -49,7 +49,6 @@ Route::group(['prefix' => 'reports'], function () { | ||||
|  | ||||
| }); | ||||
|  | ||||
|  | ||||
| Route::get('/invoices/pdf/{id}', [ | ||||
|     'as' => 'get.invoice.pdf', | ||||
|     'uses' => 'FrontendController@getInvoicePdf' | ||||
|  | ||||
| @ -65,8 +65,8 @@ class CompanySettingTest extends TestCase | ||||
|         $company = [ | ||||
|             'name' => 'XYZ', | ||||
|             'country_id' => 2, | ||||
|             'state_id' => 3, | ||||
|             'city_id' => 4, | ||||
|             'state' => 'city', | ||||
|             'city' => 'state', | ||||
|             'address_street_1' => 'test1', | ||||
|             'address_street_2' => 'test2', | ||||
|             'phone' => '1234567890', | ||||
| @ -80,8 +80,8 @@ class CompanySettingTest extends TestCase | ||||
|         $address2 = $response->decodeResponseJson()['user']['addresses'][0]; | ||||
|         $this->assertEquals($company['name'], $company2['name']); | ||||
|         $this->assertEquals($company['country_id'], $address2['country_id']); | ||||
|         $this->assertEquals($company['state_id'], $address2['state_id']); | ||||
|         $this->assertEquals($company['city_id'], $address2['city_id']); | ||||
|         $this->assertEquals($company['state'], $address2['state']); | ||||
|         $this->assertEquals($company['city'], $address2['city']); | ||||
|         $this->assertEquals($company['address_street_1'], $address2['address_street_1']); | ||||
|         $this->assertEquals($company['address_street_2'], $address2['address_street_2']); | ||||
|         $this->assertEquals($company['phone'], $address2['phone']); | ||||
|  | ||||
| @ -5,8 +5,6 @@ use Tests\TestCase; | ||||
| use Illuminate\Foundation\Testing\WithFaker; | ||||
| use Illuminate\Foundation\Testing\RefreshDatabase; | ||||
| use Crater\Country; | ||||
| use Crater\State; | ||||
| use Crater\City; | ||||
| use SettingsSeeder; | ||||
| class LocationTest extends TestCase | ||||
| { | ||||
| @ -26,20 +24,4 @@ class LocationTest extends TestCase | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetStates() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/states/1'); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
|  | ||||
|     /** @test */ | ||||
|     public function testGetCities() | ||||
|     { | ||||
|         $response = $this->json('GET', 'api/cities/1'); | ||||
|  | ||||
|         $response->assertOk(); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	