]> _ Git - pmi.git/commitdiff
wip #5791 @7:00
authorsoufiane <soufiane@cubedesigners.com>
Thu, 23 Mar 2023 01:20:03 +0000 (02:20 +0100)
committersoufiane <soufiane@cubedesigners.com>
Thu, 23 Mar 2023 01:20:03 +0000 (02:20 +0100)
app/Http/Controllers/AjaxController.php
app/SubForms/Address.php
resources/js/app.js
resources/styles/components/my-account.styl
resources/views/components/address-form.blade.php
resources/views/pages/sign_in.blade.php

index fc7061ec9cac77136bb232334728dfecc9086951..98dc02535dc9c1d5eaeddeaac33d8170e8b64d62 100644 (file)
@@ -364,20 +364,88 @@ class AjaxController extends CubistFrontController
     }
 
     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() {
@@ -385,6 +453,17 @@ class AjaxController extends CubistFrontController
         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();
     }
index 4c7af3714ffa9524fc759f72c2e29c6ed6fbae89..495d3b145724d65b5f4a9af470873b80e097c123 100644 (file)
@@ -8,6 +8,19 @@ class Address extends SubForm {
     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",
index 09e307ab25fcd1a7192d0f834f8076dd5d8e6fe5..ddde1fda0ab2faa95941e2e200c3ef85e308ce09 100644 (file)
@@ -67,7 +67,9 @@ const app = new Vue({
         validateRegister: false,
         tab: 'infos',
         addresses: [{}],
-        user: ''
+        user: '',
+        default_billing_address: null,
+        default_delivery_address: null
     },
 
     beforeMount() {
@@ -94,6 +96,10 @@ const app = new Vue({
         });
     },
 
+    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.
@@ -241,6 +247,12 @@ const app = new Vue({
                     //
                     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) {
 
@@ -268,6 +280,48 @@ const app = new Vue({
                 .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) {
+
+                })
+
         }
     }
 
index bf5b5afb6c04e665595789d457efe757cd1f1e30..f723dd0864fd18426fc0a7cf6f315dfbf762b18d 100644 (file)
@@ -26,7 +26,8 @@
   &-container-content
     padding: 46px 96px
 
-  &-address
+  &-address,
+  &-password
     .ajax-form:not(:last-child)
       padding-bottom: 48px
       border-bottom: 1px solid theme('colors.light-b')
@@ -34,6 +35,9 @@
       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
index 900acc7dc23c085da820bad326288902d5946186..0eda80496b9580f2897d4b3bb82e86999ee7a7ff 100644 (file)
@@ -1,21 +1,21 @@
-<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>
+
index 9450f80db801a4bf1ef3e169a25a1fbaeae60a20..df48aaa67e94719c35d6f717c88ff47fdc0d333a 100644 (file)
                         </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">