split the 'name' column in the customer addresses into 'first_name' and 'last_name' - it is more common to save the data in this structure

This commit is contained in:
David Große 2020-01-13 11:20:04 +01:00
parent 81c928025b
commit 7eee7e3134
8 changed files with 137 additions and 76 deletions

View File

@ -16,6 +16,13 @@ class AddCompanyNameAndVatIdToCustomerAddresses extends Migration
Schema::table('customer_addresses', function (Blueprint $table) {
$table->string('company_name')->nullable()->before('address1');
$table->string('vat_id')->nullable()->after('company_name');
// split 'name' column into first_name and last_name
$table->dropColumn('name');
$table->string('first_name')->after('company_name');
$table->string('last_name')->after('first_name');
});
}
@ -29,6 +36,9 @@ class AddCompanyNameAndVatIdToCustomerAddresses extends Migration
Schema::table('customer_addresses', function (Blueprint $table) {
$table->dropColumn('company_name');
$table->dropColumn('vat_id');
$table->dropColumn('first_name');
$table->dropColumn('last_name');
$table->string('name');
});
}
}

View File

@ -76,13 +76,15 @@ class AddressController extends Controller
$data = collect(request()->input())->except('_token')->toArray();
$this->validate(request(), [
'address1' => 'string|required',
'country' => 'string|required',
'state' => 'string|required',
'city' => 'string|required',
'postcode' => 'required',
'phone' => 'required',
'vat_id' => new VatIdRule(),
'first_name' => 'string|required',
'last_name' => 'string|required',
'address1' => 'string|required',
'country' => 'string|required',
'state' => 'string|required',
'city' => 'string|required',
'postcode' => 'required',
'phone' => 'required',
'vat_id' => new VatIdRule(),
]);
$cust_id['customer_id'] = $this->customer->id;
@ -132,13 +134,15 @@ class AddressController extends Controller
request()->merge(['address1' => implode(PHP_EOL, array_filter(request()->input('address1')))]);
$this->validate(request(), [
'address1' => 'string|required',
'country' => 'string|required',
'state' => 'string|required',
'city' => 'string|required',
'postcode' => 'required',
'phone' => 'required',
'vat_id' => new VatIdRule(),
'first_name' => 'string|required',
'last_name' => 'string|required',
'address1' => 'string|required',
'country' => 'string|required',
'state' => 'string|required',
'city' => 'string|required',
'postcode' => 'required',
'phone' => 'required',
'vat_id' => new VatIdRule(),
]);
$data = collect(request()->input())->except('_token')->toArray();

View File

@ -12,6 +12,8 @@ class CustomerAddress extends Model implements CustomerAddressContract
protected $fillable = [
'customer_id',
'company_name',
'first_name',
'last_name',
'vat_id',
'address1',
'address2',

View File

@ -221,6 +221,8 @@ return [
'create' => [
'page-title' => 'Add Address Form',
'company_name' => 'Company name',
'first_name' => 'First name',
'last_name' => 'Last name',
'vat_id' => 'Vat id',
'title' => 'Add Address',
'street-address' => 'Street Address',
@ -238,6 +240,8 @@ return [
'edit' => [
'page-title' => 'Edit Address',
'company_name' => 'Company name',
'first_name' => 'First name',
'last_name' => 'Last name',
'vat_id' => 'Vat id',
'title' => 'Edit Address',
'street-address' => 'Street Address',

View File

@ -29,7 +29,7 @@
{!! view_render_event('bagisto.shop.customers.account.address.create.before') !!}
<form method="post" action="{{ route('customer.address.create') }}" @submit.prevent="onSubmit">
<form id="customer-address-form" method="post" action="{{ route('customer.address.create') }}" @submit.prevent="onSubmit">
<div class="account-table-content">
@csrf
@ -42,6 +42,18 @@
<span class="control-error" v-if="errors.has('company_name')">@{{ errors.first('company_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('first_name') ? 'has-error' : '']">
<label for="first_name" class="required">{{ __('shop::app.customer.account.address.edit.first_name') }}</label>
<input type="text" v-validate="'required'" class="control" name="first_name" data-vv-as="&quot;{{ __('shop::app.customer.account.address.edit.first_name') }}&quot;">
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('last_name') ? 'has-error' : '']">
<label for="last_name" class="required">{{ __('shop::app.customer.account.address.edit.last_name') }}</label>
<input type="text" v-validate="'required'" class="control" name="last_name" data-vv-as="&quot;{{ __('shop::app.customer.account.address.edit.last_name') }}&quot;">
<span class="control-error" v-if="errors.has('last_name')">@{{ errors.first('last_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('vat_id') ? 'has-error' : '']">
<label for="vat_id">{{ __('shop::app.customer.account.address.create.vat_id') }}</label>
<input type="text" class="control" name="vat_id" data-vv-as="&quot;{{ __('shop::app.customer.account.address.create.vat_id') }}&quot;">

View File

@ -29,7 +29,7 @@
{!! view_render_event('bagisto.shop.customers.account.address.edit.before', ['address' => $address]) !!}
<form method="post" action="{{ route('customer.address.edit', $address->id) }}" @submit.prevent="onSubmit">
<form id="customer-address-form" method="post" action="{{ route('customer.address.edit', $address->id) }}" @submit.prevent="onSubmit">
<div class="account-table-content">
@method('PUT')
@ -43,6 +43,18 @@
<span class="control-error" v-if="errors.has('company_name')">@{{ errors.first('company_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('first_name') ? 'has-error' : '']">
<label for="first_name" class="required">{{ __('shop::app.customer.account.address.edit.first_name') }}</label>
<input type="text" value="{{ $address->first_name }}" v-validate="'required'" class="control" name="first_name" data-vv-as="&quot;{{ __('shop::app.customer.account.address.edit.first_name') }}&quot;">
<span class="control-error" v-if="errors.has('first_name')">@{{ errors.first('first_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('last_name') ? 'has-error' : '']">
<label for="last_name" class="required">{{ __('shop::app.customer.account.address.edit.last_name') }}</label>
<input type="text" value="{{ $address->last_name }}" v-validate="'required'" class="control" name="last_name" data-vv-as="&quot;{{ __('shop::app.customer.account.address.edit.last_name') }}&quot;">
<span class="control-error" v-if="errors.has('last_name')">@{{ errors.first('last_name') }}</span>
</div>
<div class="control-group" :class="[errors.has('vat_id') ? 'has-error' : '']">
<label for="vat_id">{{ __('shop::app.customer.account.address.edit.vat_id') }}</label>
<input type="text" value="{{ $address->vat_id }}" class="control" name="vat_id" data-vv-as="&quot;{{ __('shop::app.customer.account.address.edit.vat_id') }}&quot;">
@ -94,7 +106,7 @@
</div>
</div>
</form>
</formi>
{!! view_render_event('bagisto.shop.customers.account.address.edit.after', ['address' => $address]) !!}

View File

@ -6,95 +6,108 @@
@section('content-wrapper')
<div class="account-content">
<div class="account-content">
@include('shop::customers.account.partials.sidemenu')
@include('shop::customers.account.partials.sidemenu')
<div class="account-layout">
<div class="account-layout">
<div class="account-head">
<span class="back-icon"><a href="{{ route('customer.account.index') }}"><i class="icon icon-menu-back"></i></a></span>
<span class="account-heading">{{ __('shop::app.customer.account.address.index.title') }}</span>
<div class="account-head">
<span class="back-icon"><a href="{{ route('customer.account.index') }}"><i
class="icon icon-menu-back"></i></a></span>
<span
class="account-heading">{{ __('shop::app.customer.account.address.index.title') }}</span>
@if (! $addresses->isEmpty())
<span class="account-action">
@if (! $addresses->isEmpty())
<span class="account-action">
<a href="{{ route('customer.address.create') }}">{{ __('shop::app.customer.account.address.index.add') }}</a>
</span>
@else
<span></span>
@endif
<div class="horizontal-rule"></div>
</div>
@else
<span></span>
@endif
<div class="horizontal-rule"></div>
</div>
{!! view_render_event('bagisto.shop.customers.account.address.list.before', ['addresses' => $addresses]) !!}
{!! view_render_event('bagisto.shop.customers.account.address.list.before', ['addresses' => $addresses]) !!}
<div class="account-table-content">
@if ($addresses->isEmpty())
<div>{{ __('shop::app.customer.account.address.index.empty') }}</div>
<br/>
<a href="{{ route('customer.address.create') }}">{{ __('shop::app.customer.account.address.index.add') }}</a>
@else
<div class="address-holder">
@foreach ($addresses as $address)
<div class="address-card">
<div class="details">
<span class="bold">{{ auth()->guard('customer')->user()->name }}</span>
<ul class="address-card-list">
<li class="mt-5">
{{ $address->name }}
</li>
<div class="account-table-content">
@if ($addresses->isEmpty())
<div>{{ __('shop::app.customer.account.address.index.empty') }}</div>
<br/>
<a href="{{ route('customer.address.create') }}">{{ __('shop::app.customer.account.address.index.add') }}</a>
@else
<div class="address-holder">
@foreach ($addresses as $address)
<div class="address-card">
<div class="details">
<span
class="bold">{{ auth()->guard('customer')->user()->name }}</span>
<ul class="address-card-list">
<li class="mt-5">
{{ $address->company_name }}
</li>
<li class="mt-5">
{{ $address->address1 }},
</li>
<li class="mt-5">
{{ $address->first_name }}
</li>
<li class="mt-5">
{{ $address->city }}
</li>
<li class="mt-5">
{{ $address->last_name }}
</li>
<li class="mt-5">
{{ $address->state }}
</li>
<li class="mt-5">
{{ $address->address1 }},
</li>
<li class="mt-5">
{{ core()->country_name($address->country) }} {{ $address->postcode }}
</li>
<li class="mt-5">
{{ $address->city }}
</li>
<li class="mt-10">
{{ __('shop::app.customer.account.address.index.contact') }} : {{ $address->phone }}
</li>
</ul>
<li class="mt-5">
{{ $address->state }}
</li>
<div class="control-links mt-20">
<li class="mt-5">
{{ core()->country_name($address->country) }} {{ $address->postcode }}
</li>
<li class="mt-10">
{{ __('shop::app.customer.account.address.index.contact') }}
: {{ $address->phone }}
</li>
</ul>
<div class="control-links mt-20">
<span>
<a href="{{ route('customer.address.edit', $address->id) }}">
{{ __('shop::app.customer.account.address.index.edit') }}
</a>
</span>
<span>
<a href="{{ route('address.delete', $address->id) }}" onclick="deleteAddress('{{ __('shop::app.customer.account.address.index.confirm-delete') }}')">
<span>
<a href="{{ route('address.delete', $address->id) }}"
onclick="deleteAddress('{{ __('shop::app.customer.account.address.index.confirm-delete') }}')">
{{ __('shop::app.customer.account.address.index.delete') }}
</a>
</span>
</div>
</div>
</div>
</div>
@endforeach
</div>
@endif
</div>
@endforeach
</div>
@endif
</div>
{!! view_render_event('bagisto.shop.customers.account.address.list.after', ['addresses' => $addresses]) !!}
{!! view_render_event('bagisto.shop.customers.account.address.list.after', ['addresses' => $addresses]) !!}
</div>
</div>
</div>
@endsection
@push('scripts')
<script>
function deleteAddress(message) {
if (!confirm(message))
event.preventDefault();
event.preventDefault();
}
</script>
@endpush

View File

@ -11,7 +11,7 @@ class CustomerCest
public function updateCustomerProfile(FunctionalTester $I)
{
$customer = $I->loginAsCustomer();
$I->loginAsCustomer();
$I->amOnPage('/');
@ -37,9 +37,9 @@ class CustomerCest
{
$faker = Faker\Factory::create();
$formCssSelector = '.account-layout > form:nth-child(2)';
$formCssSelector = '#customer-address-form';
$customer = $I->loginAsCustomer();
$I->loginAsCustomer();
$I->amOnPage('/');
@ -51,6 +51,8 @@ class CustomerCest
$fields = [
'company_name' => $faker->company,
'first_name' => $faker->firstName,
'last_name' => $faker->lastName,
'vat_id' => $faker->randomNumber(9),
'address1[]' => $faker->streetAddress,
'country' => $faker->countryCode,
@ -90,6 +92,8 @@ class CustomerCest
$I->seeRecord(CustomerAddress::class, [
'company_name' => $fields['company_name'],
'first_name' => $fields['first_name'],
'last_name' => $fields['last_name'],
'vat_id' => $fields['vat_id'],
'address1' => $fields['address1[]'],
'country' => $fields['country'],