Skip to content

Commit

Permalink
Added charging tax at the organiser level
Browse files Browse the repository at this point in the history
1) Added new field to the organiser model called charge_tax. Added the migration for this.
2)  Renamed tax fields columns in the database to be the same as the other organiser fields for consistency.
3) Added charge_tax option to the various organiser create and edit pages.
4) Have re-enabled some tests and used the @group passing label so we can start running tests for the various parts of the applicaiton.
  • Loading branch information
jeremyquinton committed Jul 9, 2018
1 parent 1bc089d commit 40138bb
Show file tree
Hide file tree
Showing 9 changed files with 191 additions and 49 deletions.
15 changes: 9 additions & 6 deletions app/Http/Controllers/OrganiserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ public function postCreateOrganiser(Request $request)
{
$organiser = Organiser::createNew(false, false, true);

$chargeTax = $request->get('charge_tax');

if ($chargeTax == 'Yes') {
$organiser->addExtraValidationRules();
}
if (!$organiser->validate($request->all())) {
return response()->json([
'status' => 'error',
Expand All @@ -53,13 +58,11 @@ public function postCreateOrganiser(Request $request)
$organiser->facebook = $request->get('facebook');
$organiser->twitter = $request->get('twitter');
$organiser->confirmation_key = str_random(15);
$organiser->taxname = $request->get('taxname');
$organiser->taxvalue = $request->get('taxvalue');
$organiser->taxid = $request->get('taxid');

$organiser->taxname = $request->get('taxname');
$organiser->taxvalue = round($request->get('taxvalue'),2);
$organiser->taxid = $request->get('taxid');
$organiser->tax_name = $request->get('tax_name');
$organiser->tax_value = round($request->get('tax_value'),2);
$organiser->tax_id = $request->get('tax_id');
$organiser->charge_tax = ($chargeTax == 'Yes') ? 1 : 0;

if ($request->hasFile('organiser_logo')) {
$organiser->setLogo($request->file('organiser_logo'));
Expand Down
9 changes: 6 additions & 3 deletions app/Http/Controllers/OrganiserCustomizeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,12 @@ public function postEditOrganiser(Request $request, $organiser_id)
$organiser->enable_organiser_page = $request->get('enable_organiser_page');
$organiser->facebook = $request->get('facebook');
$organiser->twitter = $request->get('twitter');
$organiser->taxname = $request->get('taxname');
$organiser->taxvalue = $request->get('taxvalue');
$organiser->taxid = $request->get('taxid');
$organiser->tax_name = $request->get('tax_name');
$organiser->tax_value = $request->get('tax_value');
$organiser->tax_id = $request->get('tax_id');
$organiser->charge_tax = ($request->get('charge_tax') == 1) ? 1 : 0;

//var_dump($organiser->charge_tax);

if ($request->get('remove_current_image') == '1') {
$organiser->logo_path = '';
Expand Down
27 changes: 20 additions & 7 deletions app/Models/Organiser.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@

namespace App\Models;

use Illuminate\Auth\Authenticatable;
use Illuminate\Http\UploadedFile;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Str;
use Image;

class Organiser extends MyBaseModel
class Organiser extends MyBaseModel implements AuthenticatableContract
{
use Authenticatable;
/**
* The validation rules for the model.
*
Expand All @@ -16,21 +19,24 @@ class Organiser extends MyBaseModel
protected $rules = [
'name' => ['required'],
'email' => ['required', 'email'],
'taxname' => ['required','max:15'],
'taxvalue' => ['required','numeric'],
'taxid' => ['required','max:100'],
'organiser_logo' => ['mimes:jpeg,jpg,png', 'max:10000'],
];

protected $extra_rules = [
'tax_name' => ['required','max:15'],
'tax_value' => ['required','numeric'],
'tax_id' => ['required','max:100'],
];

/**
* The validation rules for the model.
*
* @var array $attributes
*/
protected $attributes = [
'taxname' => 'Tax Name',
'taxvalue' => 'Tax Rate',
'taxid' => 'Tax ID',
'tax_name' => 'Tax Name',
'tax_value' => 'Tax Rate',
'tax_id' => 'Tax ID',
];

/**
Expand Down Expand Up @@ -161,5 +167,12 @@ public function setLogo(UploadedFile $file)
$this->logo_path = $relativePath;
}
}

/**
* Adds extra validator rules to the organiser object depending on whether tax is required or not
*/
public function addExtraValidationRules() {
$this->rules = $this->rules + $this->extra_rules;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AdditionalTaxFieldRenameCurrentTaxFields extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('organisers', function (Blueprint $table) {
$table->boolean('charge_tax')->default(0);
$table->renameColumn('taxname', 'tax_name');
$table->renameColumn('taxvalue', 'tax_value');
$table->renameColumn('taxid', 'tax_id');
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('organisers', function (Blueprint $table) {
$table->dropColumn('charge_tax');
$table->renameColumn('tax_name', 'taxname');
$table->renameColumn('tax_value', 'taxvalue');
$table->renameColumn('tax_id', 'taxid');
});
}
}
4 changes: 2 additions & 2 deletions phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="MAIL_DRIVER" value="log"/>
<env name="DB_HOST" value="176.58.123.120"/>
<env name="DB_DATABASE" value="test"/>
<env name="DB_HOST" value="db"/>
<env name="DB_DATABASE" value="attendize"/>
</php>
</phpunit>
25 changes: 14 additions & 11 deletions resources/views/ManageOrganiser/CreateOrganiser.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,6 @@
</div>
</div>
</div>




<div class="form-group">
{!! Form::label('about', trans("Organiser.organiser_description"), array('class'=>'control-label ')) !!}
{!! Form::textarea('about', Input::old('about'),
Expand All @@ -65,26 +61,33 @@
'rows' => 4
)) !!}
</div>
<div class="form-group">
<p>Do you want to Charge Tax at your Events?</p>
{!! Form::label('Yes', 'Yes', array('class'=>'control-label', 'id' => 'charge_yes')) !!}
{{ Form::radio('charge_tax', 'Yes' , false) }}
{!! Form::label('No', 'No', array('class'=>'control-label','id' => 'charge_no')) !!}
{{ Form::radio('charge_tax', 'No' , true) }}
</div>

<div class="row">
<div id="tax_fields" class="row">
<div class="col-md-6">
<div class="form-group">
{!! Form::label('taxid', 'Tax ID', array('class'=>'control-label required')) !!}
{!! Form::text('taxid', Input::old('taxid'), array('class'=>'form-control', 'placeholder'=>'Tax ID')) !!}
{!! Form::label('tax_id', 'Tax ID', array('class'=>'control-label required')) !!}
{!! Form::text('tax_id', Input::old('tax_id'), array('class'=>'form-control', 'placeholder'=>'Tax ID')) !!}
</div>
</div>

<div class="col-md-3">
<div class="form-group">
{!! Form::label('taxname', 'Tax name', array('class'=>'control-label required')) !!}
{!! Form::text('taxname', Input::old('taxname'), array('class'=>'form-control', 'placeholder'=>'Tax name')) !!}
{!! Form::label('tax_name', 'Tax name', array('class'=>'control-label required')) !!}
{!! Form::text('tax_name', Input::old('tax_name'), array('class'=>'form-control', 'placeholder'=>'Tax name')) !!}
</div>
</div>

<div class="col-md-3">
<div class="form-group">
{!! Form::label('taxvalue', 'Tax value', array('class'=>'control-label required')) !!}
{!! Form::text('taxvalue', Input::old('taxvalue'), array('class'=>'form-control', 'placeholder'=>'Tax Value')) !!}
{!! Form::label('tax_value', 'Tax value', array('class'=>'control-label required')) !!}
{!! Form::text('tax_value', Input::old('tax_value'), array('class'=>'form-control', 'placeholder'=>'Tax Value')) !!}
</div>
</div>
</div>
Expand Down
54 changes: 42 additions & 12 deletions resources/views/ManageOrganiser/Customize.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,25 @@
});
});
$(document).ready(function(){
var charge_tax = $("input[type=radio][name='charge_tax']:checked").val();
if (charge_tax == 1) {
$('#tax_fields').show();
} else {
$('#tax_fields').hide();
}
$('input[type=radio][name=charge_tax]').change(function() {
if (this.value == 1) {
$('#tax_fields').show();
}
else {
$('#tax_fields').hide();
}
});
});
</script>
@stop

Expand Down Expand Up @@ -94,24 +113,35 @@
)) !!}
</div>
<div class="row">
<div class="col-md-6">
<div class="col-md-12">
<div class="form-group">
{!! Form::label('taxid', 'Tax ID', array('class'=>'control-label required')) !!}
{!! Form::text('taxid', Input::old('taxid'), array('class'=>'form-control', 'placeholder'=>'Tax ID')) !!}
<p>Do you want to Charge Tax at your Events?</p>
<label for="Yes" class="control-label" id="charge_yes">Yes</label>
<input name="charge_tax" type="radio" value="1" {{ $organiser->charge_tax == 1 ? 'checked' : '' }}>
<label for="No" class="control-label" id="charge_no">No</label>
<input name="charge_tax" type="radio" value="0" {{ $organiser->charge_tax == 0 ? 'checked' : '' }}>
</div>
</div>
<div id="tax_fields">
<div class="col-md-6">
<div class="form-group">
{!! Form::label('tax_id', 'Tax ID', array('class'=>'control-label required')) !!}
{!! Form::text('tax_id', Input::old('tax_id'), array('class'=>'form-control', 'placeholder'=>'Tax ID')) !!}
</div>
</div>

<div class="col-md-3">
<div class="form-group">
{!! Form::label('taxname', 'Tax name', array('class'=>'control-label required')) !!}
{!! Form::text('taxname', Input::old('taxname'), array('class'=>'form-control', 'placeholder'=>'Tax name')) !!}
<div class="col-md-3">
<div class="form-group">
{!! Form::label('tax_name', 'Tax name', array('class'=>'control-label required')) !!}
{!! Form::text('tax_name', Input::old('tax_name'), array('class'=>'form-control', 'placeholder'=>'Tax name')) !!}
</div>
</div>
</div>

<div class="col-md-3">
<div class="form-group">
{!! Form::label('taxvalue', 'Tax value', array('class'=>'control-label required')) !!}
{!! Form::text('taxvalue', Input::old('taxvalue'), array('class'=>'form-control', 'placeholder'=>'Tax Value')) !!}
<div class="col-md-3">
<div class="form-group">
{!! Form::label('tax_value', 'Tax value', array('class'=>'control-label required')) !!}
{!! Form::text('tax_value', Input::old('tax_value'), array('class'=>'form-control', 'placeholder'=>'Tax Value')) !!}
</div>
</div>
</div>
</div>
Expand Down
8 changes: 5 additions & 3 deletions tests/OrganiserCustomizeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,20 @@

class OrganiserCustomizeTest extends TestCase
{
/**
* @group passing
*/
public function test_customize_organiser_is_successful()
{
$organiser = factory(App\Models\Organiser::class)->create();

$this->actingAs($this->test_user)
$this->actingAs($organiser)
->visit(route('showOrganiserCustomize', ['organiser_id' => $organiser->id]))
->type($this->faker->name, 'name')
->type($this->faker->email, 'email')
->type($this->faker->email, 'about')
->type($this->faker->word, 'facebook')
->type($this->faker->word, 'twitter')
->press('Create Organiser')
->press('Save Organiser')
->seeJson([
'status' => 'success'
]);
Expand Down
61 changes: 56 additions & 5 deletions tests/OrganiserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,69 @@

class OrganiserTest extends TestCase
{
public function test_create_organiser_is_successful()
/**
* @group passing
*/
public function test_create_organiser_is_successful_when_charge_tax_is_no()
{

$email = $this->faker->email;

$this->actingAs($this->test_user)
->visit(route('showCreateOrganiser'))
->type($this->faker->name, 'name')
->type($this->faker->email, 'email')
->type($this->faker->email, 'about')
->type($this->faker->word, 'facebook')
->type($this->faker->word, 'twitter')
->type($email, 'email')
->type('No', 'charge_tax')
->press('Create Organiser')
->seeJson([
'status' => 'success'
]);

//get the most recently created organiser from database
$this->organiser = Organiser::where('email','=', $email)->orderBy('created_at', 'desc')->first();
//check the charge tax flag is 0
$this->assertEquals($this->organiser->charge_tax, 0);
}

/**
* @group passing
*/
public function test_create_organiser_is_successful_when_charge_tax_is_yes()
{
$email = $this->faker->email;

$this->actingAs($this->test_user)
->visit(route('showCreateOrganiser'))
->type($this->faker->name, 'name')
->type($email, 'email')
->type('organisers', 'tax_name')
->type(12323, 'tax_id')
->type(15, 'tax_value')
->type('Yes', 'charge_tax')
->press('Create Organiser')
->seeJson([
'status' => 'success'
]);

//get the most recently created organiser from database
$this->organiser = Organiser::where('email','=', $email)->orderBy('created_at', 'desc')->first();
//check the charge tax flag is 1
$this->assertEquals($this->organiser->charge_tax, 1);
}

/**
* @group passing
*/
public function test_create_organiser_fails_when_organiser_details_missing()
{
$this->actingAs($this->test_user)
->visit(route('showCreateOrganiser'))
->type('', 'name')
->type('', 'email')
->type('No', 'charge_tax')
->press('Create Organiser')
->seeJson([
'status' => 'error'
]);
}
}

0 comments on commit 40138bb

Please sign in to comment.