diff --git a/app/Http/Controllers/TaxRateApiController.php b/app/Http/Controllers/TaxRateApiController.php new file mode 100644 index 000000000000..7cacfcf8311b --- /dev/null +++ b/app/Http/Controllers/TaxRateApiController.php @@ -0,0 +1,68 @@ +taxRateService = $taxRateService; + $this->taxRateRepo = $taxRateRepo; + } + + public function index() + { + $taxRates = TaxRate::scope()->withTrashed(); + $taxRates = $taxRates->paginate(); + + $paginator = TaxRate::scope()->withTrashed()->paginate(); + + $transformer = new TaxRateTransformer(Auth::user()->account, $this->serializer); + $data = $this->createCollection($taxRates, $transformer, 'tax_rates', $paginator); + + return $this->response($data); + } + + public function store(CreateTaxRateRequest $request) + { + return $this->save($request); + } + + public function update(UpdateTaxRateRequest $request, $taxRatePublicId) + { + $taxRate = TaxRate::scope($taxRatePublicId)->firstOrFail(); + + if ($request->action == ACTION_ARCHIVE) { + $this->taxRateRepo->archive($taxRate); + + $transformer = new TaxRateTransformer(Auth::user()->account, $request->serializer); + $data = $this->createItem($taxRate, $transformer, 'tax_rates'); + + return $this->response($data); + } else { + return $this->save($request, $taxRate); + } + } + + private function save($request, $taxRate = false) + { + $taxRate = $this->taxRateRepo->save($request->input(), $taxRate); + + $transformer = new TaxRateTransformer(\Auth::user()->account, $request->serializer); + $data = $this->createItem($taxRate, $transformer, 'tax_rates'); + + return $this->response($data); + } +} diff --git a/app/Http/Controllers/TaxRateController.php b/app/Http/Controllers/TaxRateController.php index 85d3c7903383..acda2602a4d0 100644 --- a/app/Http/Controllers/TaxRateController.php +++ b/app/Http/Controllers/TaxRateController.php @@ -13,16 +13,22 @@ use Redirect; use App\Models\TaxRate; use App\Services\TaxRateService; +use App\Ninja\Repositories\TaxRateRepository; + +use App\Http\Requests\CreateTaxRateRequest; +use App\Http\Requests\UpdateTaxRateRequest; class TaxRateController extends BaseController { protected $taxRateService; + protected $taxRateRepo; - public function __construct(TaxRateService $taxRateService) + public function __construct(TaxRateService $taxRateService, TaxRateRepository $taxRateRepo) { parent::__construct(); $this->taxRateService = $taxRateService; + $this->taxRateRepo = $taxRateRepo; } public function index() @@ -59,34 +65,25 @@ class TaxRateController extends BaseController return View::make('accounts.tax_rate', $data); } - public function store() + public function store(CreateTaxRateRequest $request) { - return $this->save(); - } - - public function update($publicId) - { - return $this->save($publicId); - } - - private function save($publicId = false) - { - if ($publicId) { - $taxRate = TaxRate::scope($publicId)->firstOrFail(); - } else { - $taxRate = TaxRate::createNew(); - } - - $taxRate->name = trim(Input::get('name')); - $taxRate->rate = Utils::parseFloat(Input::get('rate')); - $taxRate->save(); - - $message = $publicId ? trans('texts.updated_tax_rate') : trans('texts.created_tax_rate'); - Session::flash('message', $message); + $this->taxRateRepo->save($request->input()); + Session::flash('message', trans('texts.created_tax_rate')); return Redirect::to('settings/' . ACCOUNT_TAX_RATES); } + public function update(UpdateTaxRateRequest $request, $publicId) + { + $taxRate = TaxRate::scope($publicId)->firstOrFail(); + + $this->taxRateRepo->save($request->input(), $taxRate); + + Session::flash('message', trans('texts.updated_tax_rate')); + return Redirect::to('settings/' . ACCOUNT_TAX_RATES); + } + + public function bulk() { $action = Input::get('bulk_action'); diff --git a/app/Http/Requests/CreateTaxRateRequest.php b/app/Http/Requests/CreateTaxRateRequest.php new file mode 100644 index 000000000000..bcf1ad1115b7 --- /dev/null +++ b/app/Http/Requests/CreateTaxRateRequest.php @@ -0,0 +1,31 @@ + 'required', + 'rate' => 'required', + ]; + } +} diff --git a/app/Http/Requests/UpdateTaxRateRequest.php b/app/Http/Requests/UpdateTaxRateRequest.php new file mode 100644 index 000000000000..6e562ac0d0ab --- /dev/null +++ b/app/Http/Requests/UpdateTaxRateRequest.php @@ -0,0 +1,31 @@ + 'required', + 'rate' => 'required', + ]; + } +} diff --git a/app/Http/routes.php b/app/Http/routes.php index a314fa07dab5..362441a4a52b 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -232,9 +232,9 @@ Route::group(['middleware' => 'api', 'prefix' => 'api/v1'], function() Route::resource('tasks', 'TaskApiController'); Route::post('hooks', 'IntegrationController@subscribe'); Route::post('email_invoice', 'InvoiceApiController@emailInvoice'); - Route::post('email_invoicev2', 'InvoiceApiController@emailInvoicev2'); - Route::get('user_accounts','AccountApiController@getUserAccounts'); + Route::get('user_accounts', 'AccountApiController@getUserAccounts'); Route::resource('products', 'ProductApiController'); + Route::resource('tax_rates', 'TaxRateApiController'); // Vendor Route::resource('vendors', 'VendorApiController'); diff --git a/app/Models/Account.php b/app/Models/Account.php index 7893267a348b..f847193ef652 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -37,6 +37,12 @@ class Account extends Eloquent 'size_id', 'industry_id', 'email_footer', + 'timezone_id', + 'date_format_id', + 'datetime_format_id', + 'currency_id', + 'language_id', + 'military_time', ]; public static $basicSettings = [ diff --git a/app/Models/TaxRate.php b/app/Models/TaxRate.php index 751cdb3205b2..7adf6f768b5f 100644 --- a/app/Models/TaxRate.php +++ b/app/Models/TaxRate.php @@ -7,6 +7,11 @@ class TaxRate extends EntityModel use SoftDeletes; protected $dates = ['deleted_at']; + protected $fillable = [ + 'name', + 'rate' + ]; + public function getEntityType() { return ENTITY_TAX_RATE; diff --git a/app/Ninja/Repositories/TaxRateRepository.php b/app/Ninja/Repositories/TaxRateRepository.php index 1b9fa8df773b..2e325100a016 100644 --- a/app/Ninja/Repositories/TaxRateRepository.php +++ b/app/Ninja/Repositories/TaxRateRepository.php @@ -20,6 +20,22 @@ class TaxRateRepository extends BaseRepository ->select('tax_rates.public_id', 'tax_rates.name', 'tax_rates.rate', 'tax_rates.deleted_at'); } + public function save($data, $taxRate = false) + { + if ( ! $taxRate) { + if (isset($data['public_id'])) { + $taxRate = TaxRate::scope($data['public_id'])->firstOrFail(); + } else { + $taxRate = TaxRate::createNew(); + } + } + + $taxRate->fill($data); + $taxRate->save(); + + return $taxRate; + } + /* public function save($taxRates) { diff --git a/tests/acceptance/APICest.php b/tests/acceptance/APICest.php index 53981b9cb256..0260ac75056f 100644 --- a/tests/acceptance/APICest.php +++ b/tests/acceptance/APICest.php @@ -64,6 +64,12 @@ class APICest $this->createEntity('payment', $data); $this->listEntities('payment'); + $data = new stdClass; + $data->name = $this->faker->word; + $data->rate = $this->faker->numberBetween(1, 10); + $this->createEntity('tax_rate', $data); + $this->listEntities('tax_rate'); + $this->listEntities('account'); }