From 8c98981a5a8fa90e5b834bb1fb7ab2b6f4f4b53d Mon Sep 17 00:00:00 2001
From: Hieu Pham <hieupham@TeuSofts-MacBook-Pro.local>
Date: Wed, 20 Feb 2019 10:49:06 +0700
Subject: [PATCH 1/3] planning whr

---
 app/planning/planning.html  | 42 ++++++++++++++++++-------------------
 dist/planning/planning.html | 42 ++++++++++++++++++-------------------
 2 files changed, 42 insertions(+), 42 deletions(-)

diff --git a/app/planning/planning.html b/app/planning/planning.html
index f19c7a8..0a8b6db 100644
--- a/app/planning/planning.html
+++ b/app/planning/planning.html
@@ -28,7 +28,8 @@
                     </a>
                     <div class="dropdown-menu-right dropdown__md" uib-dropdown-menu role="menu" aria-labelledby="single-button"
                         auto-close="outsideClick">
-                        <a class="dropdown-item" ng-repeat="type in planCtrl.PlanningTypes track by type.shift_type_id" ng-click="planCtrl.toogleShiftType(type)">
+                        <a class="dropdown-item" ng-repeat="type in planCtrl.PlanningTypes track by type.shift_type_id"
+                            ng-click="planCtrl.toogleShiftType(type)">
                             <div class="custom-control custom-checkbox">
                                 <input type="checkbox" class="custom-control-input" id="shifOnlyCheck{{type.shift_type_id}}"
                                     ng-checked="planCtrl.selectedShiftType(type)">
@@ -50,32 +51,32 @@
     <div class="container-fluid navbar d-flex justify-content-between">
         <div class="sub__nav--left">
             <a class="action nomargin-left nopadding-left" ng-click="planCtrl.prevWeek()"><i class="ti ti16 ti-previous"></i></a>
-            <a class="action link nopadding nomargin" ng-click="planCtrl.thisWeek(true)" translate="00_04_this_week" ng-if="!planCtrl.is_this_week"></a>
+            <a class="action link nopadding nomargin" ng-click="planCtrl.thisWeek(true)" translate="00_04_this_week"
+                ng-if="!planCtrl.is_this_week"></a>
             <span class="action reset-cursor nopadding nomargin" translate="00_04_this_week" ng-if="planCtrl.is_this_week"></span>
             <a class="action" ng-click="planCtrl.nextWeek()"><i class="ti ti16 ti-next"></i></a>
             <a date-range-picker ng-model="planCtrl.datePicker.date" options="planCtrl.datePicker.options">
                 <i class="ti ti16 ti-calender"></i> <span ng-bind="planCtrl.weekText"></span></a>
-            <!-- <input date-range-picker class="form-control-sm date-picker" type="text" options="planCtrl.datePicker.options"
-                ng-model="planCtrl.datePicker.date" /> -->
         </div>
         <div class="sub__nav--right">
-            <a class="action action-icon" ng-click="planCtrl.openWhr()">
+            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.openWhr()">
                 <i class="ti mdi mdi-flag-checkered mdi-primary ti16"></i><span class="badge-number" ng-if="planCtrl.totalBreak > 0">
                     <i class="mdi mdi-brightness-1 ti ti-red ti10"></i></span>
                 <span translate="22_00_check_label"></span>
-            </a>
-            <div class="action custom-control custom-checkbox">
-                <input type="checkbox" class="custom-control-input" id="shifOnlyCheck" ng-checked="planCtrl.is_only_scheduled"
-                    ng-click="planCtrl.is_only_scheduled = !planCtrl.is_only_scheduled; planCtrl.reloadData()">
-                <label class="custom-control-label" for="shifOnlyCheck">
-                    <span translate="01_01_show_only"></span>
-                </label>
-            </div>
+            </button>
+            <button type="button" class="btn btn-outline-light">
+                <span class="action custom-control custom-checkbox">
+                    <input type="checkbox" class="custom-control-input" id="shifOnlyCheck" ng-model="planCtrl.is_only_scheduled"
+                        ng-change="planCtrl.reloadData()" ng-true-value=true ng-false-value=false>
+                    <label class="custom-control-label" for="shifOnlyCheck">
+                        <span translate="01_01_show_only"></span>
+                    </label>
+                </span>
+            </button>
             <!-- <div class="dropdown" ng-if="planCtrl.permissions['1_245']"> -->
-            <a class="action action-icon" ng-click="planCtrl.openPrint()">
-                <i class="ti mdi mdi-printer ti16"></i>
-                <span translate="00_03_print"></span>
-            </a>
+            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.openPrint()">
+                <i class="ti mdi mdi-printer ti16"></i> <span translate="00_03_print"></span>
+            </button>
             <!-- <div class="dropdown" uib-dropdown="" dropdown-append-to-body="true" ng-if="planCtrl.planningInfor.count_unpublish > 0">
                 <a class="action action-icon" uib-dropdown-toggle=""><i class="ti ti-publish ti-primary ti16"></i>
                     <translate>01_01_publish_all</translate>
@@ -122,10 +123,9 @@
                     </div>
                 </div>
             </div> -->
-            <a class="action action-icon" ng-click="planCtrl.showOption($event)">
-                <i class="ti ti-settings ti16"></i>
-                <span translate="00_06_options"></span>
-            </a>
+            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.showOption($event)">
+                <i class="ti ti-settings ti16"></i> <span translate="00_06_options"></span>
+            </button>
         </div>
     </div>
 </section>
diff --git a/dist/planning/planning.html b/dist/planning/planning.html
index f19c7a8..0a8b6db 100644
--- a/dist/planning/planning.html
+++ b/dist/planning/planning.html
@@ -28,7 +28,8 @@
                     </a>
                     <div class="dropdown-menu-right dropdown__md" uib-dropdown-menu role="menu" aria-labelledby="single-button"
                         auto-close="outsideClick">
-                        <a class="dropdown-item" ng-repeat="type in planCtrl.PlanningTypes track by type.shift_type_id" ng-click="planCtrl.toogleShiftType(type)">
+                        <a class="dropdown-item" ng-repeat="type in planCtrl.PlanningTypes track by type.shift_type_id"
+                            ng-click="planCtrl.toogleShiftType(type)">
                             <div class="custom-control custom-checkbox">
                                 <input type="checkbox" class="custom-control-input" id="shifOnlyCheck{{type.shift_type_id}}"
                                     ng-checked="planCtrl.selectedShiftType(type)">
@@ -50,32 +51,32 @@
     <div class="container-fluid navbar d-flex justify-content-between">
         <div class="sub__nav--left">
             <a class="action nomargin-left nopadding-left" ng-click="planCtrl.prevWeek()"><i class="ti ti16 ti-previous"></i></a>
-            <a class="action link nopadding nomargin" ng-click="planCtrl.thisWeek(true)" translate="00_04_this_week" ng-if="!planCtrl.is_this_week"></a>
+            <a class="action link nopadding nomargin" ng-click="planCtrl.thisWeek(true)" translate="00_04_this_week"
+                ng-if="!planCtrl.is_this_week"></a>
             <span class="action reset-cursor nopadding nomargin" translate="00_04_this_week" ng-if="planCtrl.is_this_week"></span>
             <a class="action" ng-click="planCtrl.nextWeek()"><i class="ti ti16 ti-next"></i></a>
             <a date-range-picker ng-model="planCtrl.datePicker.date" options="planCtrl.datePicker.options">
                 <i class="ti ti16 ti-calender"></i> <span ng-bind="planCtrl.weekText"></span></a>
-            <!-- <input date-range-picker class="form-control-sm date-picker" type="text" options="planCtrl.datePicker.options"
-                ng-model="planCtrl.datePicker.date" /> -->
         </div>
         <div class="sub__nav--right">
-            <a class="action action-icon" ng-click="planCtrl.openWhr()">
+            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.openWhr()">
                 <i class="ti mdi mdi-flag-checkered mdi-primary ti16"></i><span class="badge-number" ng-if="planCtrl.totalBreak > 0">
                     <i class="mdi mdi-brightness-1 ti ti-red ti10"></i></span>
                 <span translate="22_00_check_label"></span>
-            </a>
-            <div class="action custom-control custom-checkbox">
-                <input type="checkbox" class="custom-control-input" id="shifOnlyCheck" ng-checked="planCtrl.is_only_scheduled"
-                    ng-click="planCtrl.is_only_scheduled = !planCtrl.is_only_scheduled; planCtrl.reloadData()">
-                <label class="custom-control-label" for="shifOnlyCheck">
-                    <span translate="01_01_show_only"></span>
-                </label>
-            </div>
+            </button>
+            <button type="button" class="btn btn-outline-light">
+                <span class="action custom-control custom-checkbox">
+                    <input type="checkbox" class="custom-control-input" id="shifOnlyCheck" ng-model="planCtrl.is_only_scheduled"
+                        ng-change="planCtrl.reloadData()" ng-true-value=true ng-false-value=false>
+                    <label class="custom-control-label" for="shifOnlyCheck">
+                        <span translate="01_01_show_only"></span>
+                    </label>
+                </span>
+            </button>
             <!-- <div class="dropdown" ng-if="planCtrl.permissions['1_245']"> -->
-            <a class="action action-icon" ng-click="planCtrl.openPrint()">
-                <i class="ti mdi mdi-printer ti16"></i>
-                <span translate="00_03_print"></span>
-            </a>
+            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.openPrint()">
+                <i class="ti mdi mdi-printer ti16"></i> <span translate="00_03_print"></span>
+            </button>
             <!-- <div class="dropdown" uib-dropdown="" dropdown-append-to-body="true" ng-if="planCtrl.planningInfor.count_unpublish > 0">
                 <a class="action action-icon" uib-dropdown-toggle=""><i class="ti ti-publish ti-primary ti16"></i>
                     <translate>01_01_publish_all</translate>
@@ -122,10 +123,9 @@
                     </div>
                 </div>
             </div> -->
-            <a class="action action-icon" ng-click="planCtrl.showOption($event)">
-                <i class="ti ti-settings ti16"></i>
-                <span translate="00_06_options"></span>
-            </a>
+            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.showOption($event)">
+                <i class="ti ti-settings ti16"></i> <span translate="00_06_options"></span>
+            </button>
         </div>
     </div>
 </section>
-- 
GitLab


From 39dbff40fae69afdf61da3ec6f68f0290065388c Mon Sep 17 00:00:00 2001
From: Hieu Pham <hieupham@TeuSofts-MacBook-Pro.local>
Date: Wed, 20 Feb 2019 16:22:39 +0700
Subject: [PATCH 2/3] planning publish all

---
 app/planning/employee/employee.binding.js     | 101 ++++++++++--------
 app/planning/employee/employee.controller.js  |   1 +
 app/planning/planning.controller.js           |  12 +++
 app/planning/planning.html                    |  71 ++++++------
 dist/planning/employee/employee.binding.js    | 101 ++++++++++--------
 dist/planning/employee/employee.controller.js |   1 +
 dist/planning/planning.controller.js          |  12 +++
 dist/planning/planning.html                   |  71 ++++++------
 8 files changed, 214 insertions(+), 156 deletions(-)

diff --git a/app/planning/employee/employee.binding.js b/app/planning/employee/employee.binding.js
index 2983b8f..cb8a715 100644
--- a/app/planning/employee/employee.binding.js
+++ b/app/planning/employee/employee.binding.js
@@ -4,21 +4,23 @@ define(['app'], function (app) {
                 getPlanningHtml: getPlanningHtml,
                 getLocalShiftById: getLocalShiftById,
                 updateLocalShiftById: updateLocalShiftById,
-                getWhrdata: getWhrdata
+                getWhrdata: getWhrdata,
+                getUnpublished: getUnpublished
             },
             shiftsLocalDB = [],
             whr_data = [];
-            TEMPLATE = {
-                /**
-                 *
-                 * groupId
-                 * groupName
-                 * departmentName
-                 * employeeRow
-                 *
-                 * @returns template group Html
-                 */
-                groupBlockTemplate: '<div class="card card-planning-group mb-3 groupBlock-[groupId]" data-id="[groupId]">\
+        unpublished = [];
+        TEMPLATE = {
+            /**
+             *
+             * groupId
+             * groupName
+             * departmentName
+             * employeeRow
+             *
+             * @returns template group Html
+             */
+            groupBlockTemplate: '<div class="card card-planning-group mb-3 groupBlock-[groupId]" data-id="[groupId]">\
                 <div class="card-header border-right" style="background-color: [groupBgColor]; border-left-color: [groupBorderColor]">\
                     <h6 class="mb-0">[groupName]</h6>\
                     <small class="text-secondary">[departmentName]</small>\
@@ -27,22 +29,22 @@ define(['app'], function (app) {
                     [employeeRow]\
                 </div>\
             </div>',
-                /**
-                 * userId
-                 * avatar
-                 * username
-                 * totalHour
-                 * day1Html
-                 * day2Html
-                 * day3Html
-                 * day4Html
-                 * day5Html
-                 * day6Html
-                 * day7Html
-                 *
-                 * employee row template html
-                 */
-                employeeRowTemplate: '<div class="d-flex employeRow" data-id="[userId]">\
+            /**
+             * userId
+             * avatar
+             * username
+             * totalHour
+             * day1Html
+             * day2Html
+             * day3Html
+             * day4Html
+             * day5Html
+             * day6Html
+             * day7Html
+             *
+             * employee row template html
+             */
+            employeeRowTemplate: '<div class="d-flex employeRow" data-id="[userId]">\
                 <div class="col--280px">\
                     <div class="media align-items-center">\
                         <img width="36" class="mr-2 avatar " src="[avatar]" />\
@@ -79,19 +81,19 @@ define(['app'], function (app) {
                 </div>\
             </div>',
 
-                /**
-                 * shiftClasses
-                 * shiftId
-                 * starttime
-                 * endtime
-                 * role
-                 * commentClass
-                 * breakClass
-                 * skillsClass
-                 *
-                 * shift row template html
-                 */
-                shiftTemplate: '<div data-drag="::planCtrl.dragdropOpts.drag.isEnable" data-jqyoui-options="::planCtrl.dragdropOpts.drag.config" jqyoui-draggable="::planCtrl.dragdropOpts.drag.options" class="shift [shiftClasses] s-[shiftId]" data-id="[shiftId]" ng-mouseover="planCtrl.hoverShift($event, [shiftId])" ng-mouseleave="planCtrl.blurShift($event, [shiftId])" ng-click="planCtrl.openEditShiftModal([shiftId])" style="background-color: [shiftColor]">[shiftRibbon]\
+            /**
+             * shiftClasses
+             * shiftId
+             * starttime
+             * endtime
+             * role
+             * commentClass
+             * breakClass
+             * skillsClass
+             *
+             * shift row template html
+             */
+            shiftTemplate: '<div data-drag="::planCtrl.dragdropOpts.drag.isEnable" data-jqyoui-options="::planCtrl.dragdropOpts.drag.config" jqyoui-draggable="::planCtrl.dragdropOpts.drag.options" class="shift [shiftClasses] s-[shiftId]" data-id="[shiftId]" ng-mouseover="planCtrl.hoverShift($event, [shiftId])" ng-mouseleave="planCtrl.blurShift($event, [shiftId])" ng-click="planCtrl.openEditShiftModal([shiftId])" style="background-color: [shiftColor]">[shiftRibbon]\
                 <div class="s--wiget"></div>\
                 <div class="s--content">\
                     <div class="s--time">\
@@ -109,8 +111,8 @@ define(['app'], function (app) {
                     <i class="ti ti-skills-hashtag [skillsClass]"></i>\
                 </div>\
             </div>',
-                emptyShiftTemplate: '<div class="shift s--empty" ng-mouseover="planCtrl.hoverShift($event, 0)" ng-mouseleave="planCtrl.blurShift($event, 0)" data-drop="::planCtrl.dragdropOpts.drop.isEnable" data-jqyoui-options="::planCtrl.dragdropOpts.drop.config" jqyoui-droppable="::planCtrl.dragdropOpts.drop.newShift.options"></div>'
-            };
+            emptyShiftTemplate: '<div class="shift s--empty" ng-mouseover="planCtrl.hoverShift($event, 0)" ng-mouseleave="planCtrl.blurShift($event, 0)" data-drop="::planCtrl.dragdropOpts.drop.isEnable" data-jqyoui-options="::planCtrl.dragdropOpts.drop.config" jqyoui-droppable="::planCtrl.dragdropOpts.drop.newShift.options"></div>'
+        };
 
         function getPlanningHtml(data) {
             var html = '',
@@ -118,6 +120,7 @@ define(['app'], function (app) {
                 planningDayHtml = ['', '', '', '', '', '', ''];
             shiftsLocalDB = [];
             whr_data = [];
+            unpublished = [];
             // retrieve group from data
             _.forEach(data, function (group) {
                 employeeHtml = '';
@@ -127,7 +130,9 @@ define(['app'], function (app) {
                 }
                 // retrieve employee from group employees
                 _.forEach(group.employees, function (employee) {
-                    grp.employees.push({employee_id: employee.employee_id});
+                    grp.employees.push({
+                        employee_id: employee.employee_id
+                    });
                     var maxlength = 0,
                         longestItems = employee.days.filter(function (day) {
                             if (day.plans.length > maxlength) {
@@ -145,6 +150,9 @@ define(['app'], function (app) {
 
                         // retrieve shift from day
                         _.forEach(day.plans, function (shift) {
+                            if (shift.status == "0") {
+                                unpublished.push(shift);
+                            }
                             shiftsLocalDB[shift.shift_id] = shift;
                             planningDayHtml[dKey] += TEMPLATE.shiftTemplate.replaceAll({
                                 shiftId: shift.shift_id,
@@ -166,7 +174,6 @@ define(['app'], function (app) {
                         }
                     });
 
-
                     employeeHtml += TEMPLATE.employeeRowTemplate.replaceAll({
                         userId: employee.employee_id ? employee.employee_id : 0,
                         avatar: employee.avatar,
@@ -201,9 +208,13 @@ define(['app'], function (app) {
             return html;
         }
 
+        function getUnpublished() {
+            return unpublished;
+        }
         function getWhrdata() {
             return whr_data;
         }
+
         function getLocalShiftById(id) {
             return shiftsLocalDB[id];
         }
diff --git a/app/planning/employee/employee.controller.js b/app/planning/employee/employee.controller.js
index 5c6ab46..c7d3931 100644
--- a/app/planning/employee/employee.controller.js
+++ b/app/planning/employee/employee.controller.js
@@ -65,6 +65,7 @@ define(['app', 'planning.data.module', 'PlaningEmployeeBindingService'], functio
             ).then(function (data) {
                 $scope.$apply(function () {
                     _vm.planningHtml = $sce.trustAsHtml(PlanningEmployeeBinding.getPlanningHtml(data.data));
+                    $scope.$parent.planCtrl.unpublish = $scope.$parent.planCtrl.getUnpublished();
                 });
             });
         }
diff --git a/app/planning/planning.controller.js b/app/planning/planning.controller.js
index a673e53..1a9ae9a 100644
--- a/app/planning/planning.controller.js
+++ b/app/planning/planning.controller.js
@@ -16,6 +16,7 @@ define(['app', 'PlanningShiftModule'], function (app) {
     var _vm = this;
     var Time = TimeFactory;
     _vm.Time = TimeFactory;
+    _vm.unpublish = [];
     _vm.planning_setting = _.find(PlanningSetting, ['key', 'planning_setting']);
     _vm.planning_history = _.find(PlanningSetting, ['key', 'planning_history']);
     _vm.sort_employee = _.find(PlanningSetting, ['key', 'sort_employee']);
@@ -30,6 +31,12 @@ define(['app', 'PlanningShiftModule'], function (app) {
 
     var ShiftModal = injector.get('ShiftModal');
     _vm.is_only_scheduled = false;
+    _vm.shiftPublicDefault = {
+      is_push_notification: false,
+      exclude_conflict_shift: true,
+      message: "",
+      plans: [],
+    };
     _vm.datePicker = {
       date: moment(),
       options: {
@@ -81,6 +88,10 @@ define(['app', 'PlanningShiftModule'], function (app) {
       });
     }
 
+    _vm.getUnpublished = function () {
+      return PlanningEmployeeBinding.getUnpublished();
+    }
+
     _vm.showOption = function () {
       var data = {
         setting: _vm.planning_setting.value,
@@ -134,6 +145,7 @@ define(['app', 'PlanningShiftModule'], function (app) {
       var index = _.indexOf(_vm.shift_types, type);
       return index >= 0;
     }
+
     function getFilterName() {
       if (_vm.shift_types.length) {
         _vm.shiftTypeFilter = _vm.shift_types[0].name;
diff --git a/app/planning/planning.html b/app/planning/planning.html
index 0a8b6db..6183bc3 100644
--- a/app/planning/planning.html
+++ b/app/planning/planning.html
@@ -18,7 +18,7 @@
         </div>
         <div class="sub__nav--right">
             <span class="margin-right"><a ng-click="planning.showFilter = true"><i class="mdi mdi-magnify ti16"></i></a></span>
-            <div uib-dropdown dropdown-append-to-body>
+            <div uib-dropdown dropdown-append-to-body class="d-inline-block">
                 <div class="dropdown" uib-dropdown auto-close="outsideClick" is-open="planning.dropdownOpen"
                     dropdown-append-to-body="true">
                     <a class="action nopadding action-icon" uib-dropdown-toggle>
@@ -59,12 +59,12 @@
                 <i class="ti ti16 ti-calender"></i> <span ng-bind="planCtrl.weekText"></span></a>
         </div>
         <div class="sub__nav--right">
-            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.openWhr()">
+            <button type="button" class="btn btn-outline-light btn-sm" ng-click="planCtrl.openWhr()">
                 <i class="ti mdi mdi-flag-checkered mdi-primary ti16"></i><span class="badge-number" ng-if="planCtrl.totalBreak > 0">
                     <i class="mdi mdi-brightness-1 ti ti-red ti10"></i></span>
                 <span translate="22_00_check_label"></span>
             </button>
-            <button type="button" class="btn btn-outline-light">
+            <button type="button" class="btn btn-outline-light btn-sm">
                 <span class="action custom-control custom-checkbox">
                     <input type="checkbox" class="custom-control-input" id="shifOnlyCheck" ng-model="planCtrl.is_only_scheduled"
                         ng-change="planCtrl.reloadData()" ng-true-value=true ng-false-value=false>
@@ -74,56 +74,61 @@
                 </span>
             </button>
             <!-- <div class="dropdown" ng-if="planCtrl.permissions['1_245']"> -->
-            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.openPrint()">
+            <button type="button" class="btn btn-outline-light btn-sm" ng-click="planCtrl.openPrint()">
                 <i class="ti mdi mdi-printer ti16"></i> <span translate="00_03_print"></span>
             </button>
-            <!-- <div class="dropdown" uib-dropdown="" dropdown-append-to-body="true" ng-if="planCtrl.planningInfor.count_unpublish > 0">
-                <a class="action action-icon" uib-dropdown-toggle=""><i class="ti ti-publish ti-primary ti16"></i>
-                    <translate>01_01_publish_all</translate>
-                </a>
-                <div uib-dropdown-menu class="dropdown-menu-right planning-dropdown-menu flat">
+            <div class="dropdown d-inline-block" uib-dropdown="" dropdown-append-to-body="true" ng-if="planCtrl.unpublish.length">
+                <button type="button" class="btn btn-outline-light btn-sm" uib-dropdown-toggle>
+                    <i class="ti ti-publish ti-primary ti16"></i>
+                    <span translate="01_01_publish_all"></span>
+                </button>
+                <div uib-dropdown-menu class="dropdown-menu-right planning-dropdown-menu">
                     <div class="dropdown-header">
-                        <strong translate>01_01_shift_publishing</strong>
+                        <strong translate="01_01_shift_publishing"></strong>
                     </div>
+                    <div class="dropdown-divider"></div>
                     <div class="dropdown-content" style="max-height: initial;">
                         <div ng-click="$event.stopPropagation();">
                             <div class="warning-conflict" ng-if="planCtrl.planningInfor.count_conflict_unpublish > 0">
                                 <i class="mdi mdi-information-outline color-info"></i>
-                                <translate>01_01_warning</translate>
+                                <span translate="01_01_warning"> </span>
                                 <p translate="01_01_conflict_warning" translate-values='{ number_shift: planCtrl.planningInfor.count_conflict_unpublish}'></p>
                                 <br>
                             </div>
-                            <div class="01_01_public_option">
-                                <p translate>01_01_public_option</p>
+                            <div class="">
+                                <p translate="01_01_public_option"></p>
                                 <div ng-if="planCtrl.planningInfor.count_conflict_unpublish > 0">
-                                    <md-checkbox aria-label="Exclude conflicts shift(s)" ng-model="planCtrl.shiftPublicDefault.exclude_conflict_shift"
-                                        class="md-primary">
-                                        <translate>01_01_exclude_conflicts_shift</translate>
-                                    </md-checkbox>
+                                    <span class="action custom-control custom-checkbox">
+                                        <input type="checkbox" class="custom-control-input" id="excludeShift" ng-model="planCtrl.shiftPublicDefault.exclude_conflict_shift"
+                                            ng-true-value=true ng-false-value=false>
+                                        <label class="custom-control-label" for="excludeShift">
+                                            <span translate="01_01_exclude_conflicts_shift"></span>
+                                        </label>
+                                    </span>
+                                </div>
+                                <div class="custom-control custom-radio">
+                                    <input type="radio" id="customRadio1" name=customRadio"" class="custom-control-input"
+                                        ng-model="planCtrl.shiftPublicDefault.is_push_notification" ng-value=false>
+                                    <label class="custom-control-label" for="customRadio1"><span translate="01_01_not_send_noti_to_employee"></span></label>
+                                </div>
+                                <div class="custom-control custom-radio">
+                                    <input type="radio" id="customRadio2" name="customRadio" class="custom-control-input"
+                                        ng-model="planCtrl.shiftPublicDefault.is_push_notification" ng-value=true>
+                                    <label class="custom-control-label" for="customRadio2"><span translate="01_01_send_noti_to_employee"></span></label>
                                 </div>
-                                <md-radio-group ng-model="planCtrl.shiftPublicDefault.is_push_notification">
-                                    <md-radio-button ng-value="false" class="md-primary">
-                                        <translate>01_01_not_send_noti_to_employee</translate>
-                                    </md-radio-button>
-                                    <md-radio-button ng-value="true" class="md-primary">
-                                        <translate>01_01_send_noti_to_employee</translate>
-                                    </md-radio-button>
-                                </md-radio-group>
                                 <textarea class="form-control" rows="3" ng-readonly="!planCtrl.shiftPublicDefault.is_push_notification"
                                     ng-model="planCtrl.shiftPublicDefault.message" placeholder="{{ '01_01_message_noti_placeholder' | translate }}"></textarea>
                             </div>
                         </div>
-                        <div class="row">
-                            <div class="pull-right">
-                                <md-button ng-click="planCtrl.activeDeactivePlanning()" class="md-raised md-primary">
-                                    <translate translate-values='{ number: planCtrl.shiftPublicDefault.exclude_conflict_shift ? (planCtrl.planningInfor.count_unpublish - planCtrl.planningInfor.count_conflict_unpublish) : planCtrl.planningInfor.count_unpublish}'>01_01_publish_with_num</translate>
-                                </md-button>
-                            </div>
+                        <div class="float-right">
+                            <button type="button" class="btn btn-primary" ng-click="planCtrl.activeDeactivePlanning()">
+                                <span translate="01_01_publish_with_num" translate-values='{ number: planCtrl.unpublish.length}'></span>
+                            </button>
                         </div>
                     </div>
                 </div>
-            </div> -->
-            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.showOption($event)">
+            </div>
+            <button type="button" class="btn btn-outline-light btn-sm" ng-click="planCtrl.showOption($event)">
                 <i class="ti ti-settings ti16"></i> <span translate="00_06_options"></span>
             </button>
         </div>
diff --git a/dist/planning/employee/employee.binding.js b/dist/planning/employee/employee.binding.js
index 73060f6..f8e1e9a 100644
--- a/dist/planning/employee/employee.binding.js
+++ b/dist/planning/employee/employee.binding.js
@@ -8,21 +8,23 @@ define(['app'], function (app) {
                 getPlanningHtml: getPlanningHtml,
                 getLocalShiftById: getLocalShiftById,
                 updateLocalShiftById: updateLocalShiftById,
-                getWhrdata: getWhrdata
+                getWhrdata: getWhrdata,
+                getUnpublished: getUnpublished
             },
             shiftsLocalDB = [],
             whr_data = [];
-            TEMPLATE = {
-                /**
-                 *
-                 * groupId
-                 * groupName
-                 * departmentName
-                 * employeeRow
-                 *
-                 * @returns template group Html
-                 */
-                groupBlockTemplate: '<div class="card card-planning-group mb-3 groupBlock-[groupId]" data-id="[groupId]">\
+        unpublished = [];
+        TEMPLATE = {
+            /**
+             *
+             * groupId
+             * groupName
+             * departmentName
+             * employeeRow
+             *
+             * @returns template group Html
+             */
+            groupBlockTemplate: '<div class="card card-planning-group mb-3 groupBlock-[groupId]" data-id="[groupId]">\
                 <div class="card-header border-right" style="background-color: [groupBgColor]; border-left-color: [groupBorderColor]">\
                     <h6 class="mb-0">[groupName]</h6>\
                     <small class="text-secondary">[departmentName]</small>\
@@ -31,22 +33,22 @@ define(['app'], function (app) {
                     [employeeRow]\
                 </div>\
             </div>',
-                /**
-                 * userId
-                 * avatar
-                 * username
-                 * totalHour
-                 * day1Html
-                 * day2Html
-                 * day3Html
-                 * day4Html
-                 * day5Html
-                 * day6Html
-                 * day7Html
-                 *
-                 * employee row template html
-                 */
-                employeeRowTemplate: '<div class="d-flex employeRow" data-id="[userId]">\
+            /**
+             * userId
+             * avatar
+             * username
+             * totalHour
+             * day1Html
+             * day2Html
+             * day3Html
+             * day4Html
+             * day5Html
+             * day6Html
+             * day7Html
+             *
+             * employee row template html
+             */
+            employeeRowTemplate: '<div class="d-flex employeRow" data-id="[userId]">\
                 <div class="col--280px">\
                     <div class="media align-items-center">\
                         <img width="36" class="mr-2 avatar " src="[avatar]" />\
@@ -83,19 +85,19 @@ define(['app'], function (app) {
                 </div>\
             </div>',
 
-                /**
-                 * shiftClasses
-                 * shiftId
-                 * starttime
-                 * endtime
-                 * role
-                 * commentClass
-                 * breakClass
-                 * skillsClass
-                 *
-                 * shift row template html
-                 */
-                shiftTemplate: '<div data-drag="::planCtrl.dragdropOpts.drag.isEnable" data-jqyoui-options="::planCtrl.dragdropOpts.drag.config" jqyoui-draggable="::planCtrl.dragdropOpts.drag.options" class="shift [shiftClasses] s-[shiftId]" data-id="[shiftId]" ng-mouseover="planCtrl.hoverShift($event, [shiftId])" ng-mouseleave="planCtrl.blurShift($event, [shiftId])" ng-click="planCtrl.openEditShiftModal([shiftId])" style="background-color: [shiftColor]">[shiftRibbon]\
+            /**
+             * shiftClasses
+             * shiftId
+             * starttime
+             * endtime
+             * role
+             * commentClass
+             * breakClass
+             * skillsClass
+             *
+             * shift row template html
+             */
+            shiftTemplate: '<div data-drag="::planCtrl.dragdropOpts.drag.isEnable" data-jqyoui-options="::planCtrl.dragdropOpts.drag.config" jqyoui-draggable="::planCtrl.dragdropOpts.drag.options" class="shift [shiftClasses] s-[shiftId]" data-id="[shiftId]" ng-mouseover="planCtrl.hoverShift($event, [shiftId])" ng-mouseleave="planCtrl.blurShift($event, [shiftId])" ng-click="planCtrl.openEditShiftModal([shiftId])" style="background-color: [shiftColor]">[shiftRibbon]\
                 <div class="s--wiget"></div>\
                 <div class="s--content">\
                     <div class="s--time">\
@@ -113,8 +115,8 @@ define(['app'], function (app) {
                     <i class="ti ti-skills-hashtag [skillsClass]"></i>\
                 </div>\
             </div>',
-                emptyShiftTemplate: '<div class="shift s--empty" ng-mouseover="planCtrl.hoverShift($event, 0)" ng-mouseleave="planCtrl.blurShift($event, 0)" data-drop="::planCtrl.dragdropOpts.drop.isEnable" data-jqyoui-options="::planCtrl.dragdropOpts.drop.config" jqyoui-droppable="::planCtrl.dragdropOpts.drop.newShift.options"></div>'
-            };
+            emptyShiftTemplate: '<div class="shift s--empty" ng-mouseover="planCtrl.hoverShift($event, 0)" ng-mouseleave="planCtrl.blurShift($event, 0)" data-drop="::planCtrl.dragdropOpts.drop.isEnable" data-jqyoui-options="::planCtrl.dragdropOpts.drop.config" jqyoui-droppable="::planCtrl.dragdropOpts.drop.newShift.options"></div>'
+        };
 
         function getPlanningHtml(data) {
             var html = '',
@@ -122,6 +124,7 @@ define(['app'], function (app) {
                 planningDayHtml = ['', '', '', '', '', '', ''];
             shiftsLocalDB = [];
             whr_data = [];
+            unpublished = [];
             // retrieve group from data
             _.forEach(data, function (group) {
                 employeeHtml = '';
@@ -131,7 +134,9 @@ define(['app'], function (app) {
                 }
                 // retrieve employee from group employees
                 _.forEach(group.employees, function (employee) {
-                    grp.employees.push({employee_id: employee.employee_id});
+                    grp.employees.push({
+                        employee_id: employee.employee_id
+                    });
                     var maxlength = 0,
                         longestItems = employee.days.filter(function (day) {
                             if (day.plans.length > maxlength) {
@@ -149,6 +154,9 @@ define(['app'], function (app) {
 
                         // retrieve shift from day
                         _.forEach(day.plans, function (shift) {
+                            if (shift.status == "0") {
+                                unpublished.push(shift);
+                            }
                             shiftsLocalDB[shift.shift_id] = shift;
                             planningDayHtml[dKey] += TEMPLATE.shiftTemplate.replaceAll({
                                 shiftId: shift.shift_id,
@@ -170,7 +178,6 @@ define(['app'], function (app) {
                         }
                     });
 
-
                     employeeHtml += TEMPLATE.employeeRowTemplate.replaceAll({
                         userId: employee.employee_id ? employee.employee_id : 0,
                         avatar: employee.avatar,
@@ -205,9 +212,13 @@ define(['app'], function (app) {
             return html;
         }
 
+        function getUnpublished() {
+            return unpublished;
+        }
         function getWhrdata() {
             return whr_data;
         }
+
         function getLocalShiftById(id) {
             return shiftsLocalDB[id];
         }
diff --git a/dist/planning/employee/employee.controller.js b/dist/planning/employee/employee.controller.js
index cafa815..64076d1 100644
--- a/dist/planning/employee/employee.controller.js
+++ b/dist/planning/employee/employee.controller.js
@@ -69,6 +69,7 @@ define(['app', 'planning.data.module', 'PlaningEmployeeBindingService'], functio
             ).then(function (data) {
                 $scope.$apply(function () {
                     _vm.planningHtml = $sce.trustAsHtml(PlanningEmployeeBinding.getPlanningHtml(data.data));
+                    $scope.$parent.planCtrl.unpublish = $scope.$parent.planCtrl.getUnpublished();
                 });
             });
         }
diff --git a/dist/planning/planning.controller.js b/dist/planning/planning.controller.js
index f83963d..2ce57b8 100644
--- a/dist/planning/planning.controller.js
+++ b/dist/planning/planning.controller.js
@@ -20,6 +20,7 @@ define(['app', 'PlanningShiftModule'], function (app) {
     var _vm = this;
     var Time = TimeFactory;
     _vm.Time = TimeFactory;
+    _vm.unpublish = [];
     _vm.planning_setting = _.find(PlanningSetting, ['key', 'planning_setting']);
     _vm.planning_history = _.find(PlanningSetting, ['key', 'planning_history']);
     _vm.sort_employee = _.find(PlanningSetting, ['key', 'sort_employee']);
@@ -34,6 +35,12 @@ define(['app', 'PlanningShiftModule'], function (app) {
 
     var ShiftModal = injector.get('ShiftModal');
     _vm.is_only_scheduled = false;
+    _vm.shiftPublicDefault = {
+      is_push_notification: false,
+      exclude_conflict_shift: true,
+      message: "",
+      plans: [],
+    };
     _vm.datePicker = {
       date: moment(),
       options: {
@@ -85,6 +92,10 @@ define(['app', 'PlanningShiftModule'], function (app) {
       });
     }
 
+    _vm.getUnpublished = function () {
+      return PlanningEmployeeBinding.getUnpublished();
+    }
+
     _vm.showOption = function () {
       var data = {
         setting: _vm.planning_setting.value,
@@ -138,6 +149,7 @@ define(['app', 'PlanningShiftModule'], function (app) {
       var index = _.indexOf(_vm.shift_types, type);
       return index >= 0;
     }
+
     function getFilterName() {
       if (_vm.shift_types.length) {
         _vm.shiftTypeFilter = _vm.shift_types[0].name;
diff --git a/dist/planning/planning.html b/dist/planning/planning.html
index 0a8b6db..6183bc3 100644
--- a/dist/planning/planning.html
+++ b/dist/planning/planning.html
@@ -18,7 +18,7 @@
         </div>
         <div class="sub__nav--right">
             <span class="margin-right"><a ng-click="planning.showFilter = true"><i class="mdi mdi-magnify ti16"></i></a></span>
-            <div uib-dropdown dropdown-append-to-body>
+            <div uib-dropdown dropdown-append-to-body class="d-inline-block">
                 <div class="dropdown" uib-dropdown auto-close="outsideClick" is-open="planning.dropdownOpen"
                     dropdown-append-to-body="true">
                     <a class="action nopadding action-icon" uib-dropdown-toggle>
@@ -59,12 +59,12 @@
                 <i class="ti ti16 ti-calender"></i> <span ng-bind="planCtrl.weekText"></span></a>
         </div>
         <div class="sub__nav--right">
-            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.openWhr()">
+            <button type="button" class="btn btn-outline-light btn-sm" ng-click="planCtrl.openWhr()">
                 <i class="ti mdi mdi-flag-checkered mdi-primary ti16"></i><span class="badge-number" ng-if="planCtrl.totalBreak > 0">
                     <i class="mdi mdi-brightness-1 ti ti-red ti10"></i></span>
                 <span translate="22_00_check_label"></span>
             </button>
-            <button type="button" class="btn btn-outline-light">
+            <button type="button" class="btn btn-outline-light btn-sm">
                 <span class="action custom-control custom-checkbox">
                     <input type="checkbox" class="custom-control-input" id="shifOnlyCheck" ng-model="planCtrl.is_only_scheduled"
                         ng-change="planCtrl.reloadData()" ng-true-value=true ng-false-value=false>
@@ -74,56 +74,61 @@
                 </span>
             </button>
             <!-- <div class="dropdown" ng-if="planCtrl.permissions['1_245']"> -->
-            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.openPrint()">
+            <button type="button" class="btn btn-outline-light btn-sm" ng-click="planCtrl.openPrint()">
                 <i class="ti mdi mdi-printer ti16"></i> <span translate="00_03_print"></span>
             </button>
-            <!-- <div class="dropdown" uib-dropdown="" dropdown-append-to-body="true" ng-if="planCtrl.planningInfor.count_unpublish > 0">
-                <a class="action action-icon" uib-dropdown-toggle=""><i class="ti ti-publish ti-primary ti16"></i>
-                    <translate>01_01_publish_all</translate>
-                </a>
-                <div uib-dropdown-menu class="dropdown-menu-right planning-dropdown-menu flat">
+            <div class="dropdown d-inline-block" uib-dropdown="" dropdown-append-to-body="true" ng-if="planCtrl.unpublish.length">
+                <button type="button" class="btn btn-outline-light btn-sm" uib-dropdown-toggle>
+                    <i class="ti ti-publish ti-primary ti16"></i>
+                    <span translate="01_01_publish_all"></span>
+                </button>
+                <div uib-dropdown-menu class="dropdown-menu-right planning-dropdown-menu">
                     <div class="dropdown-header">
-                        <strong translate>01_01_shift_publishing</strong>
+                        <strong translate="01_01_shift_publishing"></strong>
                     </div>
+                    <div class="dropdown-divider"></div>
                     <div class="dropdown-content" style="max-height: initial;">
                         <div ng-click="$event.stopPropagation();">
                             <div class="warning-conflict" ng-if="planCtrl.planningInfor.count_conflict_unpublish > 0">
                                 <i class="mdi mdi-information-outline color-info"></i>
-                                <translate>01_01_warning</translate>
+                                <span translate="01_01_warning"> </span>
                                 <p translate="01_01_conflict_warning" translate-values='{ number_shift: planCtrl.planningInfor.count_conflict_unpublish}'></p>
                                 <br>
                             </div>
-                            <div class="01_01_public_option">
-                                <p translate>01_01_public_option</p>
+                            <div class="">
+                                <p translate="01_01_public_option"></p>
                                 <div ng-if="planCtrl.planningInfor.count_conflict_unpublish > 0">
-                                    <md-checkbox aria-label="Exclude conflicts shift(s)" ng-model="planCtrl.shiftPublicDefault.exclude_conflict_shift"
-                                        class="md-primary">
-                                        <translate>01_01_exclude_conflicts_shift</translate>
-                                    </md-checkbox>
+                                    <span class="action custom-control custom-checkbox">
+                                        <input type="checkbox" class="custom-control-input" id="excludeShift" ng-model="planCtrl.shiftPublicDefault.exclude_conflict_shift"
+                                            ng-true-value=true ng-false-value=false>
+                                        <label class="custom-control-label" for="excludeShift">
+                                            <span translate="01_01_exclude_conflicts_shift"></span>
+                                        </label>
+                                    </span>
+                                </div>
+                                <div class="custom-control custom-radio">
+                                    <input type="radio" id="customRadio1" name=customRadio"" class="custom-control-input"
+                                        ng-model="planCtrl.shiftPublicDefault.is_push_notification" ng-value=false>
+                                    <label class="custom-control-label" for="customRadio1"><span translate="01_01_not_send_noti_to_employee"></span></label>
+                                </div>
+                                <div class="custom-control custom-radio">
+                                    <input type="radio" id="customRadio2" name="customRadio" class="custom-control-input"
+                                        ng-model="planCtrl.shiftPublicDefault.is_push_notification" ng-value=true>
+                                    <label class="custom-control-label" for="customRadio2"><span translate="01_01_send_noti_to_employee"></span></label>
                                 </div>
-                                <md-radio-group ng-model="planCtrl.shiftPublicDefault.is_push_notification">
-                                    <md-radio-button ng-value="false" class="md-primary">
-                                        <translate>01_01_not_send_noti_to_employee</translate>
-                                    </md-radio-button>
-                                    <md-radio-button ng-value="true" class="md-primary">
-                                        <translate>01_01_send_noti_to_employee</translate>
-                                    </md-radio-button>
-                                </md-radio-group>
                                 <textarea class="form-control" rows="3" ng-readonly="!planCtrl.shiftPublicDefault.is_push_notification"
                                     ng-model="planCtrl.shiftPublicDefault.message" placeholder="{{ '01_01_message_noti_placeholder' | translate }}"></textarea>
                             </div>
                         </div>
-                        <div class="row">
-                            <div class="pull-right">
-                                <md-button ng-click="planCtrl.activeDeactivePlanning()" class="md-raised md-primary">
-                                    <translate translate-values='{ number: planCtrl.shiftPublicDefault.exclude_conflict_shift ? (planCtrl.planningInfor.count_unpublish - planCtrl.planningInfor.count_conflict_unpublish) : planCtrl.planningInfor.count_unpublish}'>01_01_publish_with_num</translate>
-                                </md-button>
-                            </div>
+                        <div class="float-right">
+                            <button type="button" class="btn btn-primary" ng-click="planCtrl.activeDeactivePlanning()">
+                                <span translate="01_01_publish_with_num" translate-values='{ number: planCtrl.unpublish.length}'></span>
+                            </button>
                         </div>
                     </div>
                 </div>
-            </div> -->
-            <button type="button" class="btn btn-outline-light" ng-click="planCtrl.showOption($event)">
+            </div>
+            <button type="button" class="btn btn-outline-light btn-sm" ng-click="planCtrl.showOption($event)">
                 <i class="ti ti-settings ti16"></i> <span translate="00_06_options"></span>
             </button>
         </div>
-- 
GitLab


From 048f8dba636bebe0e61dfdd098e8b60be006eeff Mon Sep 17 00:00:00 2001
From: Hieu Pham <hieupham@TeuSofts-MacBook-Pro.local>
Date: Thu, 21 Feb 2019 09:21:01 +0700
Subject: [PATCH 3/3] planning publish all

---
 app/planning/planning.controller.js  |  8 ++++++++
 app/planning/planning.html           | 12 +++++++-----
 app/planning/planning.service.js     | 13 +++++++++++++
 dist/planning/planning.controller.js |  8 ++++++++
 dist/planning/planning.html          | 12 +++++++-----
 dist/planning/planning.service.js    | 13 +++++++++++++
 6 files changed, 56 insertions(+), 10 deletions(-)

diff --git a/app/planning/planning.controller.js b/app/planning/planning.controller.js
index 1a9ae9a..01799c9 100644
--- a/app/planning/planning.controller.js
+++ b/app/planning/planning.controller.js
@@ -88,6 +88,14 @@ define(['app', 'PlanningShiftModule'], function (app) {
       });
     }
 
+    _vm.activeDeactivePlanning = activeDeactivePlanning;
+    function activeDeactivePlanning() {
+      //_vm.shiftPublicDefault.plans = vm.plannings.getPlanningInfo(ACL, vm.viewType, vm.shiftPublicDefault.exclude_conflict_shift).list__unpublish;
+      PlanningData.activeDeactivePlanning(_vm.unpublish).then(function () {
+        reloadData();
+      });
+  }
+
     _vm.getUnpublished = function () {
       return PlanningEmployeeBinding.getUnpublished();
     }
diff --git a/app/planning/planning.html b/app/planning/planning.html
index 6183bc3..7381ed4 100644
--- a/app/planning/planning.html
+++ b/app/planning/planning.html
@@ -87,7 +87,7 @@
                         <strong translate="01_01_shift_publishing"></strong>
                     </div>
                     <div class="dropdown-divider"></div>
-                    <div class="dropdown-content" style="max-height: initial;">
+                    <div class="dropdown-content px-3" style="max-height: initial;">
                         <div ng-click="$event.stopPropagation();">
                             <div class="warning-conflict" ng-if="planCtrl.planningInfor.count_conflict_unpublish > 0">
                                 <i class="mdi mdi-information-outline color-info"></i>
@@ -106,18 +106,20 @@
                                         </label>
                                     </span>
                                 </div>
-                                <div class="custom-control custom-radio">
+                                <div class="custom-control custom-radio form-group ">
                                     <input type="radio" id="customRadio1" name=customRadio"" class="custom-control-input"
                                         ng-model="planCtrl.shiftPublicDefault.is_push_notification" ng-value=false>
                                     <label class="custom-control-label" for="customRadio1"><span translate="01_01_not_send_noti_to_employee"></span></label>
                                 </div>
-                                <div class="custom-control custom-radio">
+                                <div class="custom-control custom-radio form-group ">
                                     <input type="radio" id="customRadio2" name="customRadio" class="custom-control-input"
                                         ng-model="planCtrl.shiftPublicDefault.is_push_notification" ng-value=true>
                                     <label class="custom-control-label" for="customRadio2"><span translate="01_01_send_noti_to_employee"></span></label>
+                                </div> 
+                                <div class="form-group">
+                                    <textarea class="form-control" rows="3" ng-readonly="!planCtrl.shiftPublicDefault.is_push_notification"
+                                        ng-model="planCtrl.shiftPublicDefault.message" placeholder="{{ '01_01_message_noti_placeholder' | translate }}"></textarea>
                                 </div>
-                                <textarea class="form-control" rows="3" ng-readonly="!planCtrl.shiftPublicDefault.is_push_notification"
-                                    ng-model="planCtrl.shiftPublicDefault.message" placeholder="{{ '01_01_message_noti_placeholder' | translate }}"></textarea>
                             </div>
                         </div>
                         <div class="float-right">
diff --git a/app/planning/planning.service.js b/app/planning/planning.service.js
index 3f19460..70387a2 100644
--- a/app/planning/planning.service.js
+++ b/app/planning/planning.service.js
@@ -52,6 +52,19 @@ define(['app'], function (app) {
                     return response;
                 });
             },
+            deleteShift: function (data) {
+                /* function activeDeactivePlanning(data) {
+                    var groups = '';
+                    angular.forEach(data.plans, function (shift) {
+                        groups += (shift.group.parent_id?shift.group.parent_id:shift.group.group_id) + ",";
+                    })
+                    return AppHttp.post(MODULE + "activeDeactivePlanning", data, groups.substring(0, groups.length - 1));
+                } */
+                var url = BASEURL + 'shiftplanning/activeDeactivePlanning' + shift.shift_id + '/' + shift.status;
+                return $http.post(url, data).then(function (response) {
+                    return response;
+                });
+            },
             checkConflictPlanning: function (shift) {
                 var url = BASEURL + 'shiftplanning/checkConflictPlanning';
                 return $http.post(url, shift).then(function (response) {
diff --git a/dist/planning/planning.controller.js b/dist/planning/planning.controller.js
index 2ce57b8..8c74b9a 100644
--- a/dist/planning/planning.controller.js
+++ b/dist/planning/planning.controller.js
@@ -92,6 +92,14 @@ define(['app', 'PlanningShiftModule'], function (app) {
       });
     }
 
+    _vm.activeDeactivePlanning = activeDeactivePlanning;
+    function activeDeactivePlanning() {
+      //_vm.shiftPublicDefault.plans = vm.plannings.getPlanningInfo(ACL, vm.viewType, vm.shiftPublicDefault.exclude_conflict_shift).list__unpublish;
+      PlanningData.activeDeactivePlanning(_vm.unpublish).then(function () {
+        reloadData();
+      });
+  }
+
     _vm.getUnpublished = function () {
       return PlanningEmployeeBinding.getUnpublished();
     }
diff --git a/dist/planning/planning.html b/dist/planning/planning.html
index 6183bc3..7381ed4 100644
--- a/dist/planning/planning.html
+++ b/dist/planning/planning.html
@@ -87,7 +87,7 @@
                         <strong translate="01_01_shift_publishing"></strong>
                     </div>
                     <div class="dropdown-divider"></div>
-                    <div class="dropdown-content" style="max-height: initial;">
+                    <div class="dropdown-content px-3" style="max-height: initial;">
                         <div ng-click="$event.stopPropagation();">
                             <div class="warning-conflict" ng-if="planCtrl.planningInfor.count_conflict_unpublish > 0">
                                 <i class="mdi mdi-information-outline color-info"></i>
@@ -106,18 +106,20 @@
                                         </label>
                                     </span>
                                 </div>
-                                <div class="custom-control custom-radio">
+                                <div class="custom-control custom-radio form-group ">
                                     <input type="radio" id="customRadio1" name=customRadio"" class="custom-control-input"
                                         ng-model="planCtrl.shiftPublicDefault.is_push_notification" ng-value=false>
                                     <label class="custom-control-label" for="customRadio1"><span translate="01_01_not_send_noti_to_employee"></span></label>
                                 </div>
-                                <div class="custom-control custom-radio">
+                                <div class="custom-control custom-radio form-group ">
                                     <input type="radio" id="customRadio2" name="customRadio" class="custom-control-input"
                                         ng-model="planCtrl.shiftPublicDefault.is_push_notification" ng-value=true>
                                     <label class="custom-control-label" for="customRadio2"><span translate="01_01_send_noti_to_employee"></span></label>
+                                </div> 
+                                <div class="form-group">
+                                    <textarea class="form-control" rows="3" ng-readonly="!planCtrl.shiftPublicDefault.is_push_notification"
+                                        ng-model="planCtrl.shiftPublicDefault.message" placeholder="{{ '01_01_message_noti_placeholder' | translate }}"></textarea>
                                 </div>
-                                <textarea class="form-control" rows="3" ng-readonly="!planCtrl.shiftPublicDefault.is_push_notification"
-                                    ng-model="planCtrl.shiftPublicDefault.message" placeholder="{{ '01_01_message_noti_placeholder' | translate }}"></textarea>
                             </div>
                         </div>
                         <div class="float-right">
diff --git a/dist/planning/planning.service.js b/dist/planning/planning.service.js
index b56a7df..a07a9e7 100644
--- a/dist/planning/planning.service.js
+++ b/dist/planning/planning.service.js
@@ -56,6 +56,19 @@ define(['app'], function (app) {
                     return response;
                 });
             },
+            deleteShift: function (data) {
+                /* function activeDeactivePlanning(data) {
+                    var groups = '';
+                    angular.forEach(data.plans, function (shift) {
+                        groups += (shift.group.parent_id?shift.group.parent_id:shift.group.group_id) + ",";
+                    })
+                    return AppHttp.post(MODULE + "activeDeactivePlanning", data, groups.substring(0, groups.length - 1));
+                } */
+                var url = BASEURL + 'shiftplanning/activeDeactivePlanning' + shift.shift_id + '/' + shift.status;
+                return $http.post(url, data).then(function (response) {
+                    return response;
+                });
+            },
             checkConflictPlanning: function (shift) {
                 var url = BASEURL + 'shiftplanning/checkConflictPlanning';
                 return $http.post(url, shift).then(function (response) {
-- 
GitLab