From 22c66d0e7604cd2a44b83de61f276be041f39ffb Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Tue, 19 Mar 2019 16:59:30 +0100
Subject: [PATCH] FEAT #9107 front shipping add / up

---
 .../controllers/ShippingController.php        |  1 -
 .../shipping-administration.component.ts      | 38 ++++++++++++++-----
 src/frontend/lang/lang-en.ts                  |  2 +
 src/frontend/lang/lang-fr.ts                  |  2 +
 src/frontend/lang/lang-nl.ts                  |  2 +
 5 files changed, 35 insertions(+), 10 deletions(-)

diff --git a/src/app/shipping/controllers/ShippingController.php b/src/app/shipping/controllers/ShippingController.php
index 18d491da1e1..50356898d39 100755
--- a/src/app/shipping/controllers/ShippingController.php
+++ b/src/app/shipping/controllers/ShippingController.php
@@ -240,7 +240,6 @@ class ShippingController
             'data'      => ['Y']
         ]);
 
-        print_r($allEntities);
         foreach ($allEntities as $key => $value) {
             $allEntities[$key]['id'] = (string)$value['id'];
             if (empty($value['parent_id'])) {
diff --git a/src/frontend/app/administration/shipping/shipping-administration.component.ts b/src/frontend/app/administration/shipping/shipping-administration.component.ts
index 4055a62f666..38f663035ae 100644
--- a/src/frontend/app/administration/shipping/shipping-administration.component.ts
+++ b/src/frontend/app/administration/shipping/shipping-administration.component.ts
@@ -5,7 +5,7 @@ import { LANG } from '../../translate.component';
 import { MatSidenav } from '@angular/material';
 import { NotificationService } from '../../notification.service';
 import { HeaderService } from '../../../service/header.service';
-import { ActivatedRoute } from '@angular/router';
+import { ActivatedRoute, Router } from '@angular/router';
 
 declare function $j(selector: any): any;
 
@@ -48,6 +48,7 @@ export class ShippingAdministrationComponent implements OnInit {
     };
 
     entities: any[] = [];
+    entitiesClone: any = null;
     shippingClone: any = null;
 
     shapingOptions: string[] = [
@@ -72,7 +73,7 @@ export class ShippingAdministrationComponent implements OnInit {
 
 
 
-    constructor(changeDetectorRef: ChangeDetectorRef, media: MediaMatcher, public http: HttpClient, private route: ActivatedRoute, private notify: NotificationService, private headerService: HeaderService) {
+    constructor(changeDetectorRef: ChangeDetectorRef, media: MediaMatcher, public http: HttpClient, private route: ActivatedRoute, private router: Router, private notify: NotificationService, private headerService: HeaderService) {
         $j("link[href='merged_css.php']").remove();
         this.mobileQuery = media.matchMedia('(max-width: 768px)');
         this._mobileQueryListener = () => changeDetectorRef.detectChanges();
@@ -94,7 +95,7 @@ export class ShippingAdministrationComponent implements OnInit {
                     .subscribe((data: any) => {
                         console.log(data);
                         this.entities = data['entities'];
-
+                        this.entitiesClone = JSON.parse(JSON.stringify(this.entities));
                         setTimeout(() => {
                             this.initEntitiesTree(this.entities);
                         }, 0);
@@ -111,10 +112,11 @@ export class ShippingAdministrationComponent implements OnInit {
                 this.headerService.setHeader(this.lang.shippingModification);
                 this.creationMode = false;
 
-                this.http.get('../../rest/administration/shipping/' + params['id'])
+                this.http.get('../../rest/administration/shippings/' + params['id'])
                     .subscribe((data: any) => {
                         this.shipping = data['shipping']
                         this.entities = data['entities'];
+                        this.entitiesClone = JSON.parse(JSON.stringify(this.entities));
 
                         setTimeout(() => {
                             this.initEntitiesTree(this.entities);
@@ -132,10 +134,13 @@ export class ShippingAdministrationComponent implements OnInit {
 
     initEntitiesTree(entities: any) {
         $j('#jstree')
-            .on('select_node.jstree', function (e: any, data: any) {
+            .on('select_node.jstree', (e: any, data: any) => {
                 if (data.event) {
                     data.instance.select_node(data.node.children_d);
+                    this.shipping.entities = data.selected;
                 }
+            }).on('deselect_node.jstree', (e: any, data: any) => {
+                this.shipping.entities = data.selected;
             })
             .jstree({
                 "checkbox": { three_state: false },
@@ -160,14 +165,26 @@ export class ShippingAdministrationComponent implements OnInit {
 
     onSubmit() {
         this.shipping.entities = $j('#jstree').jstree(true).get_checked();
-        console.log(this.shipping);
-        /*this.http.put('../../rest/administration/shipping', this.shipping)
+
+        if (this.creationMode) {
+            this.http.post('../../rest/administration/shippings', this.shipping)
             .subscribe((data: any) => {
                 this.shippingClone = JSON.parse(JSON.stringify(this.shipping));
-                this.notify.success(this.lang.configurationUpdated);
+                this.notify.success(this.lang.shippingAdded);
+                this.router.navigate(['/administration/shippings']);
             }, (err) => {
                 this.notify.handleErrors(err);
-            });*/
+            });
+        } else {
+            this.http.put('../../rest/administration/shippings/'+this.shipping.id, this.shipping)
+            .subscribe((data: any) => {
+                this.shippingClone = JSON.parse(JSON.stringify(this.shipping));
+                this.notify.success(this.lang.shippingUpdated);
+                this.router.navigate(['/administration/shippings']);
+            }, (err) => {
+                this.notify.handleErrors(err);
+            }); 
+        }
     }
 
     checkModif() {
@@ -185,5 +202,8 @@ export class ShippingAdministrationComponent implements OnInit {
 
     cancelModification() {
         this.shipping = JSON.parse(JSON.stringify(this.shippingClone));
+        this.entities = JSON.parse(JSON.stringify(this.entitiesClone));
+        $j('#jstree').jstree(true).destroy();
+        this.initEntitiesTree(this.entities);
     }
 }
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index 354383aa41c..c918c8c6cbc 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -903,6 +903,8 @@ export const LANG_EN = {
     "pricesInformations"                            : "Prices informations",
     "shippingModification"                            : "Shipping modification",
     "shippingCreation"                            : "Shipping creation",
+    "shippingAdded"                            : "Shipping added",
+    "shippingUpdated"                            : "Shipping updated",
     "shippingDeleted"                            : "Shipping deleted",
     "shippings"                            : "Shippings",
 };
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 03be03d65bb..796d7d117f1 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -929,6 +929,8 @@ export const LANG_FR = {
     "pricesInformations"                            : "Tarifs indicatifs",
     "shippingModification"                            : "Modification du canal d'envoi",
     "shippingCreation"                            : "Création du canal d'envoi",
+    "shippingAdded"                            : "Canal d'envoi ajouté",
+    "shippingUpdated"                            : "Canal d'envoi modifié",
     "shippingDeleted"                            : "Canal d'envoi supprimé",
     "shippings"                            : "Canaux d'envoi",
 };
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index b2fd936723f..1873ab1dcbb 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -931,6 +931,8 @@ export const LANG_NL = {
     "pricesInformations"                            : "Prices informations", //_TO_TRANSLATE
     "shippingModification"                            : "Shipping modification", //_TO_TRANSLATE
     "shippingCreation"                            : "Shipping creation", //_TO_TRANSLATE
+    "shippingAdded"                            : "Shipping added", //_TO_TRANSLATE
+    "shippingUpdated"                            : "Shipping updated", //_TO_TRANSLATE
     "shippingDeleted"                            : "Shipping deleted", //_TO_TRANSLATE
     "shippings"                            : "Shippings", //_TO_TRANSLATE
 };
-- 
GitLab