}
public function update(Request $request) {
- $validation = [
- 'email' => 'required|email',
- 'lastname' => 'required|string|max:255',
- 'firstname' => 'required|string|max:255',
- 'phone' => 'required|numeric'
- ];
+ $validation = [];
+ foreach ($request->all() as $key => $field){
+ if($key === "email"){
+ $validation[$key] = 'required|email';
+ }elseif(in_array($key, ['firstname','lastname','name','company','address','city'])){
+ $validation[$key] = 'required|string|max:255';
+ }elseif(in_array($key,['phone'])){
+ $validation[$key] = 'required|numeric';
+ }
+
+ }
+
+ $data = $this->validation_form($request, $validation);
+ $email = Auth::guard('web-clients')->user()->email;
+ $client = Client::where('email',$email)->update($data);
+ }
+
+ public function updateAddress(Request $request){
+ $validation = [];
+ $index = $request->index;
+
+ foreach ($request->all() as $field){
+ if (is_array($field)) {
+ foreach ($field as $keySubfield => $subfield) {
+ if (in_array($keySubfield, ['firstname', 'lastname', 'name', 'company', 'address', 'city'])) {
+ $validation['address.' . $keySubfield] = 'required|string|max:255';
+ } elseif (in_array($keySubfield, ['zipcode'])) {
+ $validation['address.' . $keySubfield] = 'required|numeric';
+ }
+ }
+ }
+ }
+
$data = $this->validation_form($request, $validation);
$email = Auth::guard('web-clients')->user()->email;
- $client = Client::where('email', $email)->update($data);
+ $address = Auth::guard('web-clients')->user()->address;
- $client->save();
+ $addressToArray = json_decode($address);
- return $data;
+ $checkBillingAddress = array_filter($addressToArray, function($n) { return $n->billing_address; });
+ $checkDeliveryAddress = array_filter($addressToArray, function($n) { return $n->delivery_address; });
+
+
+ if(isset($request->address['billing_address'])){
+ foreach ($addressToArray as $key => &$value){
+ $value->billing_address = "0";
+ }
+ $data['address']['billing_address'] = "1";
+ }else{
+ $data['address']['billing_address'] = "0";
+ }
+
+
+
+ if(isset($request->address['delivery_address'])){
+ foreach ($addressToArray as $key => &$value){
+ $value->delivery_address = "0";
+ }
+ $data['address']['delivery_address'] = "1";
+
+ }else{
+ $data['address']['delivery_address'] = "0";
+ }
+
+ foreach ($addressToArray as $key => &$value){
+ $value->id = $key;
+ }
+ $data['address']['id'] = $index;
+ $addressToArray[$index] = (object) $data['address'];
+
+
+ if(!$checkBillingAddress && !isset($request->address['billing_address'])){
+ $addressToArray[0]->billing_address = "1";
+ }
+ if(!$checkDeliveryAddress && !isset($request->address['delivery_address'])){
+ $addressToArray[0]->delivery_address = "1";
+ }
+
+ //
+ $addressToString = json_encode($addressToArray);
+ $client = Client::where('email', $email)->update(['address' => $addressToString]);
}
public function getaddress() {
return $clientAddress;
}
+ public function deleteaddress(Request $request) {
+ $index = $request->index;
+
+ $address = Auth::guard('web-clients')->user()->address;
+ $addressToArray = json_decode($address);
+ unset($addressToArray[$index]);
+ $addressToString = json_encode($addressToArray);
+ $email = Auth::guard('web-clients')->user()->email;
+ $client = Client::where('email', $email)->update(['address' => $addressToString]);
+ }
+
public function getuser() {
return Auth::guard('web-clients')->user();
}
public function init()
{
parent::init();
+
+ $this->addField([
+ 'name' => 'id',
+ 'label' => 'Id',
+ 'type' => 'Integer',
+ 'attributes' => [
+ 'disabled' => 'disabled'
+ ],
+ 'options' => [
+ 'auto_increment' => true
+ ]
+ ]);
+
$this->addField([
'name' => 'name',
'label' => "Nom de l'adresse",
validateRegister: false,
tab: 'infos',
addresses: [{}],
- user: ''
+ user: '',
+ default_billing_address: null,
+ default_delivery_address: null
},
beforeMount() {
});
},
+ updated(){
+ console.log(this.selected)
+ },
+
computed: {
cartItemCount() {
// Todo: See if this should count just number of items or make a sum of all quantities? What is more useful? The sum of quantities can be found using map/reduce functions but this needs to be adapted for the object structure using Object.keys as the source.
//
root.user = response.data
root.addresses = JSON.parse(response.data.address)
+
+ let indexBillingAddress = root.addresses.filter(address => address.billing_address === "1")[0]['id'];
+ let indexDeliveryAddress = root.addresses.filter(address => address.delivery_address === "1")[0]['id'];
+
+ root.default_billing_address = 'billing'+indexBillingAddress
+ root.default_delivery_address = 'delivery'+indexDeliveryAddress
})
.catch(function (error) {
.catch(function (error) {
})
+ },
+ updateAddress(id){
+ let root = this,
+ form = document.getElementById(id),
+ data = new FormData(form)
+
+ axios.post('/ajax/updateAddress', data)
+ .then(function (response) {
+ //
+ root.removeErrors()
+ root.validateRegister = true
+ })
+ .catch(function (error) {
+
+ })
+ },
+ deleteAddress(index, form){
+ let root = this,
+ form_ = document.getElementById(form),
+ data = {
+ index: index
+ }
+
+ axios.post('/ajax/deleteaddress', data)
+ .then(function (response) {
+ //
+ form_.animate([
+ { opacity: 1 },
+ { opacity: 0 }
+ ],
+ {
+ duration: 1000
+ }
+ );
+ setTimeout(() => {
+ form_.parentElement.remove()
+ }, 1000)
+ })
+ .catch(function (error) {
+
+ })
+
}
}
&-container-content
padding: 46px 96px
- &-address
+ &-address,
+ &-password
.ajax-form:not(:last-child)
padding-bottom: 48px
border-bottom: 1px solid theme('colors.light-b')
label:first-child
padding-top: 0 !important
+ &-address-header
+ padding-bottom: 46px
+
form
label
padding-top: 24px !important
background-image: url(/images/icon-checked.svg)
background-repeat: no-repeat
background-position: center
+
+ .btn-show-pwd
+ position: absolute
+ top: 50%
+ transform: translateY(-50%)
+ right: 2px
+ height: 94%
+ svg
+ margin: auto
-<form class="form-portal mb-12 max-w-half-form" @submit.prevent="update('address')">
+<form :id="'update-address-'+key" class="form-portal max-w-half-form" @submit.prevent="updateAddress('update-address-'+key)">
<div class="form-group mb-12">
<div class="fields grid">
<label class="form-input text-navy">
{{ __('Donner un nom à cette adresse') }}<span>*</span>
- <input class="py-3 mt-3" type="text" v-model="address.name" required="required" name="name" />
+ <input class="py-3 mt-3" type="text" v-model="address.name" required="required" name="address[name]" />
</label>
<label class="form-input text-navy">
{{ __('Société') }}<span>*</span>
- <input class="py-3 mt-3" type="text" v-model="address.company" required="required" name="company" />
+ <input class="py-3 mt-3" type="text" v-model="address.company" required="required" name="address[company]" />
</label>
<label class="form-input half text-navy">
{{ __('Nom') }}<span>*</span>
- <input class="py-3 mt-3" type="text" v-model="address.lastname" required="required" name="lastname" />
+ <input class="py-3 mt-3" type="text" v-model="address.lastname" required="required" name="address[lastname]" />
</label>
<label class="form-input half text-navy">
{{ __('Prénom') }}<span>*</span>
- <input class="py-3 mt-3" type="text" v-model="address.firstname" required="required" name="firstname" />
+ <input class="py-3 mt-3" type="text" v-model="address.firstname" required="required" name="address[firstname]" />
</label>
<label class="form-input text-navy">
{{ __('Adresse') }}<span>*</span>
</div>
<div class="form-group">
<label class="label-checkbox flex">
- <input type="checkbox" :checked="address.billing_address === '0' ? false : true" class="w-4 h-4" />
+ <input type="checkbox" :checked="default_billing_address !== 'billing'+key ? false : true" class="w-4 h-4" name="address[billing_address]" @click="default_billing_address = 'billing'+key" />
<span class="ml-4">{{ __('Adresse de facturation par défaut') }}</span>
</label>
<label class="label-checkbox flex mb-6">
- <input type="checkbox" :checked="address.delivery_address === '0' ? false : true" class="w-4 h-4" />
+ <input type="checkbox" :checked="default_delivery_address !== 'delivery'+key ? false : true" class="w-4 h-4" name="address[delivery_address]" @click="default_delivery_address = 'delivery'+key" />
<span class="ml-4">{{ __('Adresse de livraison par défaut') }}</span>
</label>
</div>
+ <input type="hidden" :value="key" name="index">
<div class="form-footer flex flex-wrap-reverse justify-between items-center">
<span class="form-required-legend inline-block my-4 mr-3 text-grey-dark xs:self-start xs:mt-5">
*{{ __('Champs obligatoires') }}
</span>
- <button id="checkemail" class="form-submit-button btn btn-custom xs:w-full">
+ <button type="submit" class="form-submit-button btn btn-custom xs:w-full">
{{ __('Enregistrer les modifications') }}
</button>
</div>
+ <button class="flex items-center mt-12" @click.prevent="deleteAddress(key, 'update-address-'+key)" v-if="addresses.length > 1">
+ @svg('icon-trash')
+ <span class="ml-3">Supprimer cette adresse</span>
+ </button>
</form>
-<button class="flex items-center" @click="deleteAddress(key)">
- @svg('icon-trash')
- <span class="ml-3">Supprimer cette adresse</span>
-</button>
+
</div>
<input type="hidden" value="1" name="address[billing][billing_address]" />
<input type="hidden" :value="address_choice ? '1' : '0'" name="address[billing][delivery_address]" />
+ <input type="hidden" value="0" name="address[billing][id]" />
+ <input type="hidden" :value="address_choice ? '0' : '1'" name="address[delivery][id]" />
<div class="form-group line-up mt-12 pt-12" v-if="!address_choice">
<label class="form-input mb-6 text-navy">