Skip to content
This repository was archived by the owner on Jan 5, 2019. It is now read-only.

Commit ffbe7f8

Browse files
author
Mario Basic
committed
Added page header everywhere. Added automatic current exchange rate. Default cost to usd with exchange rate for calculations. Cost is saved as integer in database. Added api_token to users.
1 parent 3d23121 commit ffbe7f8

34 files changed

+813
-315
lines changed

.env.example

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ APP_LOG_LEVEL=debug
55
APP_URL=http://localhost
66

77
DB_CONNECTION=mysql
8-
DB_HOST=127.0.0.1
8+
DB_HOST=192.168.10.10
99
DB_PORT=3306
10-
DB_DATABASE=homestead
10+
DB_DATABASE=kyle
1111
DB_USERNAME=homestead
1212
DB_PASSWORD=secret
1313

app/Client.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
class Client extends Model
99
{
10-
protected $fillable = ['name', 'oib', 'street', 'city', 'postal_code'];
10+
protected $fillable = ['name', 'tax_number', 'street', 'city', 'postal_code'];
1111

1212
public function services()
1313
{

app/Console/Commands/CreateUser.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public function handle()
6262
'name' => $data['name'],
6363
'email' => $data['email'],
6464
'password' => bcrypt($data['password']),
65+
'api_token' => bin2hex(openssl_random_pseudo_bytes(16))
6566
]);
6667

6768
$this->info('User has been created.');
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Api;
4+
5+
use App\Http\Requests;
6+
use Swap\SwapInterface;
7+
use Illuminate\Http\Request;
8+
use App\Http\Controllers\Controller;
9+
10+
class QuoteController extends Controller
11+
{
12+
/**
13+
* It returns a quote from given currency to USD.
14+
*/
15+
public function getQuote(Request $request, SwapInterface $swap)
16+
{
17+
$currency = strtoupper($request->input('currency'));
18+
19+
return $swap->quote("{$currency}/USD")->getValue();
20+
}
21+
}

app/Http/Controllers/Auth/AuthController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ protected function create(array $data)
6767
'name' => $data['name'],
6868
'email' => $data['email'],
6969
'password' => bcrypt($data['password']),
70+
'api_token' => bin2hex(openssl_random_pseudo_bytes(16))
7071
]);
7172
}
7273
}

app/Http/Controllers/ClientController.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@ public function store(Request $request)
4040
{
4141
$this->validate($request, [
4242
'name' => 'required|max:255',
43-
'oib' => 'required|size:11|unique:clients',
44-
'street' => 'required|string|max:255',
45-
'city' => 'required|string|max:255',
46-
'postal_code' => 'required|integer',
43+
'tax_number' => 'required|max:255|unique:clients',
44+
'street' => 'string|max:255',
45+
'city' => 'string|max:255',
46+
'postal_code' => 'integer',
4747
]);
4848

4949
$client = Client::create([
5050
'name' => $request->get('name'),
51-
'oib' => $request->get('oib'),
51+
'tax_number' => $request->get('tax_number'),
5252
'street' => $request->get('street'),
5353
'city' => $request->get('city'),
5454
'postal_code' => $request->get('postal_code'),
@@ -85,15 +85,15 @@ public function update(Request $request, $id)
8585

8686
$this->validate($request, [
8787
'name' => 'required|max:255',
88-
'oib' => 'required|size:11|unique:clients,oib' . $client->id,
89-
'street' => 'required|string|max:255',
90-
'city' => 'required|string|max:255',
91-
'postal_code' => 'required|integer',
88+
'tax_number' => 'required|max:255|unique:clients,tax_number,' . $client->id,
89+
'street' => 'string|max:255',
90+
'city' => 'string|max:255',
91+
'postal_code' => 'integer',
9292
]);
9393

9494
$client->update([
9595
'name' => $request->get('name'),
96-
'oib' => $request->get('oib'),
96+
'tax_number' => $request->get('tax_number'),
9797
'street' => $request->get('street'),
9898
'city' => $request->get('city'),
9999
'postal_code' => $request->get('postal_code'),

app/Http/Controllers/ServiceController.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ public function store(Request $request)
5353
'note' => 'string',
5454
'month' => 'required|integer|min:1|max:12',
5555
'day' => 'required|integer|min:1|max:31',
56-
'cost' => 'required|integer|min:0',
56+
'cost' => 'required|regex:/([0-9],)+[0-9]{2,}/|min:0',
5757
'currency' => 'required|in:hrk,usd,eur',
58+
'exchange_rate' => 'required|regex:/([0-9],)+[0-9]{2,}/|min:0',
5859
'active' => 'boolean',
5960
'client_id' => 'required|exists:clients,id'
6061
]);
@@ -66,8 +67,9 @@ public function store(Request $request)
6667
$service->note = $request->get('note');
6768
$service->month = $request->get('month');
6869
$service->day = $request->get('day');
69-
$service->cost = $request->get('cost');
70+
$service->cost = convert_integer($request->get('cost'));
7071
$service->currency = $request->get('currency');
72+
$service->exchange_rate = str_replace(',', '.', $request->get('exchange_rate'));
7173
$service->active = $request->get('active', false);
7274
$service->client()->associate($client);
7375
$service->save();
@@ -114,8 +116,9 @@ public function update(Request $request, $id)
114116
'note' => 'string',
115117
'month' => 'required|integer|min:1|max:12',
116118
'day' => 'required|integer|min:1|max:31',
117-
'cost' => 'required|integer|min:0',
119+
'cost' => 'required|regex:/([0-9],)+[0-9]{2,}/|min:0',
118120
'currency' => 'required|in:hrk,usd,eur',
121+
'exchange_rate' => 'required|regex:/([0-9],)+[0-9]{2,}/|min:0',
119122
'active' => 'boolean',
120123
'client_id' => 'required|exists:clients,id'
121124
]);
@@ -125,8 +128,9 @@ public function update(Request $request, $id)
125128
'note' => $request->get('note'),
126129
'month' => $request->get('month'),
127130
'day' => $request->get('day'),
128-
'cost' => $request->get('cost'),
131+
'cost' => convert_integer($request->get('cost')),
129132
'currency' => $request->get('currency'),
133+
'exchange_rate' => str_replace(',', '.', $request->get('exchange_rate')),
130134
'active' => $request->get('active', false),
131135
]);
132136

app/Http/api_routes.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
Route::group(['prefix' => 'api/v1', 'middleware' => 'auth:api'], function () {
4+
Route::get('quote', 'QuoteController@getQuote');
5+
});

app/Providers/RouteServiceProvider.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,11 @@ protected function mapWebRoutes(Router $router)
5757
], function ($router) {
5858
require app_path('Http/routes.php');
5959
});
60+
61+
$router->group([
62+
'namespace' => $this->namespace . '\Api', 'middleware' => 'api',
63+
], function ($router) {
64+
require app_path('Http/api_routes.php');
65+
});
6066
}
6167
}

app/Service.php

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
use App\Client;
66
use App\Occurrence;
77
use Illuminate\Database\Eloquent\Model;
8+
use Collective\Html\Eloquent\FormAccessible;
89

910
class Service extends Model
1011
{
11-
protected $fillable = ['title', 'note', 'month', 'day', 'cost', 'currency', 'active'];
12+
use FormAccessible;
13+
14+
protected $fillable = ['title', 'note', 'month', 'day', 'cost', 'currency', 'active', 'exchange_rate'];
1215

1316
/**
1417
* To which client does this service belong.
@@ -29,4 +32,39 @@ public function occurrences()
2932
{
3033
return $this->hasMany(Occurrence::class);
3134
}
35+
36+
/**
37+
* Converts 112345 to 1.123,45.
38+
* For forms only.
39+
*
40+
* @param integer $value
41+
* @return string
42+
*/
43+
public function formCostAttribute($value)
44+
{
45+
return number_format($this->cost / 100, 2, ',', '');
46+
}
47+
48+
/**
49+
* Converts 112345 to 1.123,45.
50+
* For forms only.
51+
*
52+
* @param integer $value
53+
* @return string
54+
*/
55+
public function formExchangeRateAttribute($value)
56+
{
57+
return number_format($this->exchange_rate , 4, ',', '.');
58+
}
59+
60+
/**
61+
* Returns formatted cost with currency.
62+
* Converts `112345 usd` to `1.123,45 USD`.
63+
*
64+
* @return string
65+
*/
66+
public function getFormattedCostAttribute()
67+
{
68+
return number_format($this->cost / 100, 2, ',', '.') . ' ' . strtoupper($this->currency);
69+
}
3270
}

app/User.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class User extends Authenticatable
1212
* @var array
1313
*/
1414
protected $fillable = [
15-
'name', 'email', 'password',
15+
'name', 'email', 'password', 'api_token'
1616
];
1717

1818
/**

app/helpers.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
if (! function_exists('convert_integer')) {
4+
/**
5+
* Converts "1.123,45" to 112345.
6+
*
7+
* @param string $number
8+
* @return integer
9+
*/
10+
function convert_integer(string $number)
11+
{
12+
// Remove . and , from number
13+
return preg_replace('/[.|,]/', '', $number);
14+
}
15+
}

composer.json

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,23 @@
44
"keywords": ["framework", "laravel"],
55
"license": "MIT",
66
"type": "project",
7+
"support": {
8+
"issues": "https://github.com/laravelista/kyle/issues",
9+
"source": "https://github.com/laravelista/kyle"
10+
},
11+
"authors": [
12+
{
13+
"name": "Mario Bašić",
14+
"email": "[email protected]"
15+
}
16+
],
717
"require": {
818
"php": ">=5.5.9",
919
"laravel/framework": "5.2.*",
1020
"laravelcollective/html": "^5.2",
1121
"laravelista/ekko": "^1.2",
12-
"laracasts/flash": "^2.0"
22+
"laracasts/flash": "^2.0",
23+
"florianv/laravel-swap": "^0.4.0"
1324
},
1425
"require-dev": {
1526
"fzaninotto/faker": "~1.4",
@@ -24,7 +35,10 @@
2435
],
2536
"psr-4": {
2637
"App\\": "app/"
27-
}
38+
},
39+
"files": [
40+
"app/helpers.php"
41+
]
2842
},
2943
"autoload-dev": {
3044
"classmap": [

0 commit comments

Comments
 (0)