Added charging tax at the organiser level
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.
This commit is contained in:
parent
8cce15520e
commit
6771a56197
|
|
@ -40,6 +40,11 @@ class OrganiserController extends MyBaseController
|
||||||
{
|
{
|
||||||
$organiser = Organiser::createNew(false, false, true);
|
$organiser = Organiser::createNew(false, false, true);
|
||||||
|
|
||||||
|
$chargeTax = $request->get('charge_tax');
|
||||||
|
|
||||||
|
if ($chargeTax == 'Yes') {
|
||||||
|
$organiser->addExtraValidationRules();
|
||||||
|
}
|
||||||
if (!$organiser->validate($request->all())) {
|
if (!$organiser->validate($request->all())) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'status' => 'error',
|
'status' => 'error',
|
||||||
|
|
@ -53,13 +58,11 @@ class OrganiserController extends MyBaseController
|
||||||
$organiser->facebook = $request->get('facebook');
|
$organiser->facebook = $request->get('facebook');
|
||||||
$organiser->twitter = $request->get('twitter');
|
$organiser->twitter = $request->get('twitter');
|
||||||
$organiser->confirmation_key = str_random(15);
|
$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->tax_name = $request->get('tax_name');
|
||||||
$organiser->taxvalue = round($request->get('taxvalue'),2);
|
$organiser->tax_value = round($request->get('tax_value'),2);
|
||||||
$organiser->taxid = $request->get('taxid');
|
$organiser->tax_id = $request->get('tax_id');
|
||||||
|
$organiser->charge_tax = ($chargeTax == 'Yes') ? 1 : 0;
|
||||||
|
|
||||||
if ($request->hasFile('organiser_logo')) {
|
if ($request->hasFile('organiser_logo')) {
|
||||||
$organiser->setLogo($request->file('organiser_logo'));
|
$organiser->setLogo($request->file('organiser_logo'));
|
||||||
|
|
|
||||||
|
|
@ -50,9 +50,12 @@ class OrganiserCustomizeController extends MyBaseController
|
||||||
$organiser->enable_organiser_page = $request->get('enable_organiser_page');
|
$organiser->enable_organiser_page = $request->get('enable_organiser_page');
|
||||||
$organiser->facebook = $request->get('facebook');
|
$organiser->facebook = $request->get('facebook');
|
||||||
$organiser->twitter = $request->get('twitter');
|
$organiser->twitter = $request->get('twitter');
|
||||||
$organiser->taxname = $request->get('taxname');
|
$organiser->tax_name = $request->get('tax_name');
|
||||||
$organiser->taxvalue = $request->get('taxvalue');
|
$organiser->tax_value = $request->get('tax_value');
|
||||||
$organiser->taxid = $request->get('taxid');
|
$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') {
|
if ($request->get('remove_current_image') == '1') {
|
||||||
$organiser->logo_path = '';
|
$organiser->logo_path = '';
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,15 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Auth\Authenticatable;
|
||||||
use Illuminate\Http\UploadedFile;
|
use Illuminate\Http\UploadedFile;
|
||||||
|
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
|
||||||
use Str;
|
use Str;
|
||||||
use Image;
|
use Image;
|
||||||
|
|
||||||
class Organiser extends MyBaseModel
|
class Organiser extends MyBaseModel implements AuthenticatableContract
|
||||||
{
|
{
|
||||||
|
use Authenticatable;
|
||||||
/**
|
/**
|
||||||
* The validation rules for the model.
|
* The validation rules for the model.
|
||||||
*
|
*
|
||||||
|
|
@ -16,21 +19,24 @@ class Organiser extends MyBaseModel
|
||||||
protected $rules = [
|
protected $rules = [
|
||||||
'name' => ['required'],
|
'name' => ['required'],
|
||||||
'email' => ['required', 'email'],
|
'email' => ['required', 'email'],
|
||||||
'taxname' => ['required','max:15'],
|
|
||||||
'taxvalue' => ['required','numeric'],
|
|
||||||
'taxid' => ['required','max:100'],
|
|
||||||
'organiser_logo' => ['mimes:jpeg,jpg,png', 'max:10000'],
|
'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.
|
* The validation rules for the model.
|
||||||
*
|
*
|
||||||
* @var array $attributes
|
* @var array $attributes
|
||||||
*/
|
*/
|
||||||
protected $attributes = [
|
protected $attributes = [
|
||||||
'taxname' => 'Tax Name',
|
'tax_name' => 'Tax Name',
|
||||||
'taxvalue' => 'Tax Rate',
|
'tax_value' => 'Tax Rate',
|
||||||
'taxid' => 'Tax ID',
|
'tax_id' => 'Tax ID',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -161,5 +167,12 @@ class Organiser extends MyBaseModel
|
||||||
$this->logo_path = $relativePath;
|
$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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
<env name="CACHE_DRIVER" value="array"/>
|
<env name="CACHE_DRIVER" value="array"/>
|
||||||
<env name="SESSION_DRIVER" value="array"/>
|
<env name="SESSION_DRIVER" value="array"/>
|
||||||
<env name="MAIL_DRIVER" value="log"/>
|
<env name="MAIL_DRIVER" value="log"/>
|
||||||
<env name="DB_HOST" value="176.58.123.120"/>
|
<env name="DB_HOST" value="db"/>
|
||||||
<env name="DB_DATABASE" value="test"/>
|
<env name="DB_DATABASE" value="attendize"/>
|
||||||
</php>
|
</php>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
|
|
||||||
|
|
@ -52,10 +52,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{!! Form::label('about', trans("Organiser.organiser_description"), array('class'=>'control-label ')) !!}
|
{!! Form::label('about', trans("Organiser.organiser_description"), array('class'=>'control-label ')) !!}
|
||||||
{!! Form::textarea('about', Input::old('about'),
|
{!! Form::textarea('about', Input::old('about'),
|
||||||
|
|
@ -65,26 +61,33 @@
|
||||||
'rows' => 4
|
'rows' => 4
|
||||||
)) !!}
|
)) !!}
|
||||||
</div>
|
</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="col-md-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{!! Form::label('taxid', 'Tax ID', array('class'=>'control-label required')) !!}
|
{!! Form::label('tax_id', 'Tax ID', array('class'=>'control-label required')) !!}
|
||||||
{!! Form::text('taxid', Input::old('taxid'), array('class'=>'form-control', 'placeholder'=>'Tax ID')) !!}
|
{!! Form::text('tax_id', Input::old('tax_id'), array('class'=>'form-control', 'placeholder'=>'Tax ID')) !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{!! Form::label('taxname', 'Tax name', array('class'=>'control-label required')) !!}
|
{!! Form::label('tax_name', 'Tax name', array('class'=>'control-label required')) !!}
|
||||||
{!! Form::text('taxname', Input::old('taxname'), array('class'=>'form-control', 'placeholder'=>'Tax name')) !!}
|
{!! Form::text('tax_name', Input::old('tax_name'), array('class'=>'form-control', 'placeholder'=>'Tax name')) !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{!! Form::label('taxvalue', 'Tax value', array('class'=>'control-label required')) !!}
|
{!! Form::label('tax_value', 'Tax value', array('class'=>'control-label required')) !!}
|
||||||
{!! Form::text('taxvalue', Input::old('taxvalue'), array('class'=>'form-control', 'placeholder'=>'Tax Value')) !!}
|
{!! Form::text('tax_value', Input::old('tax_value'), array('class'=>'form-control', 'placeholder'=>'Tax Value')) !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
</script>
|
||||||
@stop
|
@stop
|
||||||
|
|
||||||
|
|
@ -94,24 +113,35 @@
|
||||||
)) !!}
|
)) !!}
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-12">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{!! Form::label('taxid', 'Tax ID', array('class'=>'control-label required')) !!}
|
<p>Do you want to Charge Tax at your Events?</p>
|
||||||
{!! Form::text('taxid', Input::old('taxid'), array('class'=>'form-control', 'placeholder'=>'Tax ID')) !!}
|
<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>
|
</div>
|
||||||
|
<div id="tax_fields">
|
||||||
<div class="col-md-3">
|
<div class="col-md-6">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{!! Form::label('taxname', 'Tax name', array('class'=>'control-label required')) !!}
|
{!! Form::label('tax_id', 'Tax ID', array('class'=>'control-label required')) !!}
|
||||||
{!! Form::text('taxname', Input::old('taxname'), array('class'=>'form-control', 'placeholder'=>'Tax name')) !!}
|
{!! Form::text('tax_id', Input::old('tax_id'), array('class'=>'form-control', 'placeholder'=>'Tax ID')) !!}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{!! Form::label('taxvalue', 'Tax value', array('class'=>'control-label required')) !!}
|
{!! Form::label('tax_name', 'Tax name', array('class'=>'control-label required')) !!}
|
||||||
{!! Form::text('taxvalue', Input::old('taxvalue'), array('class'=>'form-control', 'placeholder'=>'Tax Value')) !!}
|
{!! 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('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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,20 @@ use App\Models\Organiser;
|
||||||
|
|
||||||
class OrganiserCustomizeTest extends TestCase
|
class OrganiserCustomizeTest extends TestCase
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @group passing
|
||||||
|
*/
|
||||||
public function test_customize_organiser_is_successful()
|
public function test_customize_organiser_is_successful()
|
||||||
{
|
{
|
||||||
$organiser = factory(App\Models\Organiser::class)->create();
|
$organiser = factory(App\Models\Organiser::class)->create();
|
||||||
|
|
||||||
$this->actingAs($this->test_user)
|
$this->actingAs($organiser)
|
||||||
->visit(route('showOrganiserCustomize', ['organiser_id' => $organiser->id]))
|
->visit(route('showOrganiserCustomize', ['organiser_id' => $organiser->id]))
|
||||||
->type($this->faker->name, 'name')
|
->type($this->faker->name, 'name')
|
||||||
->type($this->faker->email, 'email')
|
->type($this->faker->email, 'email')
|
||||||
->type($this->faker->email, 'about')
|
|
||||||
->type($this->faker->word, 'facebook')
|
->type($this->faker->word, 'facebook')
|
||||||
->type($this->faker->word, 'twitter')
|
->type($this->faker->word, 'twitter')
|
||||||
->press('Create Organiser')
|
->press('Save Organiser')
|
||||||
->seeJson([
|
->seeJson([
|
||||||
'status' => 'success'
|
'status' => 'success'
|
||||||
]);
|
]);
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,69 @@ use App\Models\Organiser;
|
||||||
|
|
||||||
class OrganiserTest extends TestCase
|
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)
|
$this->actingAs($this->test_user)
|
||||||
->visit(route('showCreateOrganiser'))
|
->visit(route('showCreateOrganiser'))
|
||||||
->type($this->faker->name, 'name')
|
->type($this->faker->name, 'name')
|
||||||
->type($this->faker->email, 'email')
|
->type($email, 'email')
|
||||||
->type($this->faker->email, 'about')
|
->type('No', 'charge_tax')
|
||||||
->type($this->faker->word, 'facebook')
|
|
||||||
->type($this->faker->word, 'twitter')
|
|
||||||
->press('Create Organiser')
|
->press('Create Organiser')
|
||||||
->seeJson([
|
->seeJson([
|
||||||
'status' => 'success'
|
'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'
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue