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