Skip to content

Commit

Permalink
fix(employees): preserve search displayValues
Browse files Browse the repository at this point in the history
This commit cleans up the bhDateInterval controller, and stored the
hiring dates in the displayValues once they change.  This allows them to
use the displayValue mechanism by @lomamech.
  • Loading branch information
jniles committed Oct 30, 2017
1 parent 5477bae commit c60ff99
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 125 deletions.
54 changes: 26 additions & 28 deletions client/src/js/components/bhDateInterval.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,24 @@
*
* @example
* ```html
* <bh-date-interval date-from="$MyCtrl.dateFrom" date-to="$MyCtrl.dateTo" >
* <bh-date-interval date-from="$MyCtrl.dateFrom" date-to="$MyCtrl.dateTo">
* </bh-date-interval>
* ```
*/
angular.module('bhima.components')
.component('bhDateInterval', {
templateUrl: '/modules/templates/bhDateInterval.tmpl.html',
controller: bhDateInterval,
bindings: {
validationTrigger: '<', // validation trigger action
dateFrom: '=', // date from
dateTo: '=', // date to
dateId: '@', // date identifier
required: '<', // true or false
onChange: '<', // on change action
mode: '@' // the date mode (day|month|year)
}
bindings : {
validationTrigger : '<', // validation trigger action
dateFrom : '=', // date from
dateTo : '=', // date to
dateId : '@?', // date identifier
required : '<?', // true or false
onChange : '<?', // on change action
label : '@?',
mode : '@?', // the date mode (day|month|year)
},
});

// dependencies injection
Expand All @@ -40,15 +41,17 @@ function bhDateInterval(moment, bhConstants) {

vm.$onInit = function $onInit() {
vm.options = [
{ translateKey: 'FORM.LABELS.TODAY', fn: day, range: 'day' },
{ translateKey: 'FORM.LABELS.THIS_WEEK', fn: week, range: 'week' },
{ translateKey: 'FORM.LABELS.THIS_MONTH', fn: month, range: 'month' },
{ translateKey: 'FORM.LABELS.THIS_YEAR', fn: year, range: 'year' },
{ translateKey : 'FORM.LABELS.TODAY', fn : day, range : 'day' },
{ translateKey : 'FORM.LABELS.THIS_WEEK', fn : week, range : 'week' },
{ translateKey : 'FORM.LABELS.THIS_MONTH', fn : month, range : 'month' },
{ translateKey : 'FORM.LABELS.THIS_YEAR', fn : year, range : 'year' },
];

vm.label = vm.label || 'FORM.SELECT.DATE_INTERVAL';

vm.dateFormat = bhConstants.dayOptions.format;

vm.pickerOptions = { showWeeks: false };
vm.pickerOptions = { showWeeks : false };
startup();
};

Expand Down Expand Up @@ -78,18 +81,13 @@ function bhDateInterval(moment, bhConstants) {
vm.dateTo = moment().endOf('year').toDate();
}


function ajustDateType(myvar){
if(myvar instanceof Date || !myvar) { return myvar;}
return new Date(myvar);
}

function custom(){
if(vm.dateFrom){
vm.dateFrom = ajustDateType(vm.dateFrom);
function custom() {
if (vm.dateFrom) {
vm.dateFrom = new Date(vm.dateFrom);
}
if(vm.dateTo){
vm.dateTo = ajustDateType(vm.dateTo);

if (vm.dateTo) {
vm.dateTo = new Date(vm.dateTo);
}
}

Expand All @@ -100,14 +98,14 @@ function bhDateInterval(moment, bhConstants) {

function startup() {
var option;

option = ['day', 'week', 'month', 'year'].indexOf(vm.mode);

// set the default option according the mode
if (option !== -1) {
search(vm.options[option]);
vm.pickerOptions = vm.mode;
} else {
} else {
custom();
}

Expand Down
170 changes: 81 additions & 89 deletions client/src/modules/employees/registry/search.modal.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,105 +15,97 @@
<uib-tab index="0" heading="{{ 'FORM.LABELS.SEARCH_QUERRIES' | translate}}" data-custom-filter-tab>

<div class="modal-body" style="max-height : 400px; overflow: auto;">
<fieldset>
<label translate>FORM.LABELS.DATE_EMBAUCHE</label>
<bh-date-interval
date-id="embauche-date"
validation-trigger="ModalForm.$submitted"
date-from="ModalCtrl.searchQueries.dateEmbaucheFrom"
date-to="ModalCtrl.searchQueries.dateEmbaucheTo"
>
</bh-date-interval>
</fieldset>
<bh-date-interval
label="FORM.LABELS.DATE_EMBAUCHE"
date-id="embauche-date"
validation-trigger="ModalForm.$submitted"
date-from="ModalCtrl.searchQueries.dateEmbaucheFrom"
date-to="ModalCtrl.searchQueries.dateEmbaucheTo"
on-change="ModalCtrl.formatHiringDates()">
</bh-date-interval>
<br />
<fieldset>
<label translate>EMPLOYEE.EMPLOYEE_DETAILS</label>

<div class="form-group" ng-class="{ 'has-error' : ModalForm.$submitted && ModalForm.name.$invalid }">
<label class="control-label" translate>FORM.LABELS.NAME</label>
<bh-clear on-clear="ModalCtrl.clear('display_name')"></bh-clear>
<input type="text" class="form-control" name="display_name" ng-model="ModalCtrl.searchQueries.display_name">
<div class="help-block" ng-messages="ModalForm.display_name.$error" ng-show="ModalForm.$submitted">
<div ng-messages-include="modules/templates/messages.tmpl.html"></div>
</div>

<div class="form-group" ng-class="{ 'has-error' : ModalForm.$submitted && ModalForm.name.$invalid }">
<label class="control-label" translate>FORM.LABELS.NAME</label>
<bh-clear on-clear="ModalCtrl.clear('display_name')"></bh-clear>
<input type="text" class="form-control" name="display_name" ng-model="ModalCtrl.searchQueries.display_name">
<div class="help-block" ng-messages="ModalForm.display_name.$error" ng-show="ModalForm.$submitted">
<div ng-messages-include="modules/templates/messages.tmpl.html"></div>
</div>
</div>

<div class="form-group" ng-class="{ 'has-error' : ModalForm.$submitted && ModalForm.code.$invalid }">
<label class="control-label" translate>FORM.LABELS.CODE</label>
<bh-clear on-clear="ModalCtrl.clear('code')"></bh-clear>
<input type="text" class="form-control" name="code" ng-model="ModalCtrl.searchQueries.code">
<div class="help-block" ng-messages="ModalForm.code.$error" ng-show="ModalForm.$submitted">
<div ng-messages-include="modules/templates/messages.tmpl.html"></div>
</div>
<div class="form-group" ng-class="{ 'has-error' : ModalForm.$submitted && ModalForm.code.$invalid }">
<label class="control-label" translate>FORM.LABELS.CODE</label>
<bh-clear on-clear="ModalCtrl.clear('code')"></bh-clear>
<input type="text" class="form-control" name="code" ng-model="ModalCtrl.searchQueries.code">
<div class="help-block" ng-messages="ModalForm.code.$error" ng-show="ModalForm.$submitted">
<div ng-messages-include="modules/templates/messages.tmpl.html"></div>
</div>
</div>

<div class="radio">
<p class="control-label">
<strong translate>FORM.LABELS.GENDER</strong>
<bh-clear on-clear="ModalCtrl.clear('sex')"></bh-clear>
</p>
<div class="radio">
<p class="control-label">
<strong translate>FORM.LABELS.GENDER</strong>
<bh-clear on-clear="ModalCtrl.clear('sex')"></bh-clear>
</p>

<label>
<input type="radio" id="male" name="sex" value="M" ng-model="ModalCtrl.searchQueries.sex">
<span translate>FORM.LABELS.MALE</span>
</label>
</div>
<label>
<input type="radio" id="male" name="sex" value="M" ng-model="ModalCtrl.searchQueries.sex">
<span translate>FORM.LABELS.MALE</span>
</label>
</div>

<div class="radio">
<label>
<input type="radio" id="female" name="sex" value="F" ng-model="ModalCtrl.searchQueries.sex">
<span translate>FORM.LABELS.FEMALE</span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" id="female" name="sex" value="F" ng-model="ModalCtrl.searchQueries.sex">
<span translate>FORM.LABELS.FEMALE</span>
</label>
</div>

<bh-grade-select
grade-uuid="ModalCtrl.searchQueries.grade_uuid"
on-select-callback="ModalCtrl.onSelectGrade(grade)">
<bh-clear on-clear="ModalCtrl.clear('grade_uuid')"></bh-clear>
</bh-grade-select>

<bh-fonction-select
fonction-id="ModalCtrl.searchQueries.fonction_id"
on-select-callback="ModalCtrl.onSelectFonction(fonction)">
<bh-clear on-clear="ModalCtrl.clear('fonction_id')"></bh-clear>
</bh-fonction-select>

<bh-service-select
service-id="ModalCtrl.searchQueries.service_id"
on-select-callback="ModalCtrl.onSelectService(service)">
<bh-clear on-clear="ModalCtrl.clear('service_id')"></bh-clear>
</bh-service-select>

<div class="radio">
<p class="control-label">
<strong translate>FORM.LABELS.MEDICAL_NONMEDICAL_STAFF</strong>
<bh-clear on-clear="ModalCtrl.clear('is_medical')"></bh-clear>
</p>

<label>
<input type="radio" name="is_medical" value="1" ng-model="ModalCtrl.searchQueries.is_medical">
<span translate>FORM.LABELS.MEDICAL_STAFF</span>
</label>
</div>
<bh-grade-select
grade-uuid="ModalCtrl.searchQueries.grade_uuid"
on-select-callback="ModalCtrl.onSelectGrade(grade)">
<bh-clear on-clear="ModalCtrl.clear('grade_uuid')"></bh-clear>
</bh-grade-select>

<bh-fonction-select
fonction-id="ModalCtrl.searchQueries.fonction_id"
on-select-callback="ModalCtrl.onSelectFonction(fonction)">
<bh-clear on-clear="ModalCtrl.clear('fonction_id')"></bh-clear>
</bh-fonction-select>

<bh-service-select
service-id="ModalCtrl.searchQueries.service_id"
on-select-callback="ModalCtrl.onSelectService(service)">
<bh-clear on-clear="ModalCtrl.clear('service_id')"></bh-clear>
</bh-service-select>

<div class="radio">
<p class="control-label">
<strong translate>FORM.LABELS.MEDICAL_NONMEDICAL_STAFF</strong>
<bh-clear on-clear="ModalCtrl.clear('is_medical')"></bh-clear>
</p>

<label>
<input type="radio" name="is_medical" value="1" ng-model="ModalCtrl.searchQueries.is_medical">
<span translate>FORM.LABELS.MEDICAL_STAFF</span>
</label>
</div>

<div class="radio">
<label>
<input type="radio" name="is_medical" value="0" ng-model="ModalCtrl.searchQueries.is_medical">
<span translate>FORM.LABELS.NONMEDICAL_STAFF</span>
</label>
</div>
<div class="radio">
<label>
<input type="radio" name="is_medical" value="0" ng-model="ModalCtrl.searchQueries.is_medical">
<span translate>FORM.LABELS.NONMEDICAL_STAFF</span>
</label>
</div>

</fieldset>
<fieldset>
<legend translate>FORM.LABELS.DOB</legend>
<bh-date-interval
date-id="dob-date"
validation-trigger="ModalForm.$submitted"
date-from="ModalCtrl.searchQueries.dateBirthFrom"
date-to="ModalCtrl.searchQueries.dateBirthTo"
>
</bh-date-interval>
</fieldset>
<bh-date-interval
label="FORM.LABELS.DOB"
date-id="dob-date"
validation-trigger="ModalForm.$submitted"
date-from="ModalCtrl.searchQueries.dateBirthFrom"
date-to="ModalCtrl.searchQueries.dateBirthTo">
</bh-date-interval>
</div>
</uib-tab>

Expand Down
22 changes: 16 additions & 6 deletions client/src/modules/employees/registry/search.modal.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
angular.module('bhima.controllers')
.controller('EmployeeRegistryModalController', EmployeeRegistryModalController);
.controller('EmployeeRegistryModalController', EmployeeRegistryModalController);

EmployeeRegistryModalController.$inject = [
'$uibModalInstance', 'bhConstants', 'moment', 'ServiceService', 'Store', 'util', 'filters', 'EmployeeService'
'$uibModalInstance', 'bhConstants', 'moment', 'ServiceService', 'Store',
'util', 'filters', 'EmployeeService',
];

/**
Expand All @@ -22,10 +23,10 @@ function EmployeeRegistryModalController(ModalInstance, bhConstants, moment, Ser
vm.filters = filters;
vm.searchQueries = {};
vm.defaultQueries = {};
vm.today = new Date();
vm.formatHiringDates = formatHiringDates;

var lastViewFilters = Employees.filters.formatView().customFilters;

// map key to last display value for lookup in loggedChange
var lastDisplayValues = lastViewFilters.reduce(function (object, filter) {
object[filter._key] = filter.displayValue;
Expand All @@ -51,7 +52,6 @@ function EmployeeRegistryModalController(ModalInstance, bhConstants, moment, Ser
vm.cancel = cancel;
vm.clear = clear;


// custom filter service_id - assign the value to the searchQueries object
vm.onSelectService = function onSelectService(service) {
displayValues.service_id = service.name;
Expand Down Expand Up @@ -81,6 +81,16 @@ function EmployeeRegistryModalController(ModalInstance, bhConstants, moment, Ser
ModalInstance.close();
}

// stores the hiring dates in the display value
function formatHiringDates() {
if (vm.searchQueries.dateEmbaucheFrom) {
displayValues.dateEmbaucheFrom = vm.searchQueries.dateEmbaucheFrom;
}

if (vm.searchQueries.dateEmbaucheTo) {
displayValues.dateEmbaucheTo = vm.searchQueries.dateEmbaucheTo;
}
}

// returns the parameters to the parent controller
function submit(form) {
Expand All @@ -91,7 +101,7 @@ function EmployeeRegistryModalController(ModalInstance, bhConstants, moment, Ser
if (angular.isDefined(value)) {
// default to the original value if no display value is defined
var displayValue = displayValues[key] || lastDisplayValues[key] || value;
changes.post({ key: key, value: value, displayValue: value });
changes.post({ key : key, value : value, displayValue : displayValue });
}
});

Expand Down
4 changes: 2 additions & 2 deletions client/src/modules/templates/bhDateInterval.tmpl.html
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<ng-form name="DateIntervalForm" novalidate>

<div
<div
class="form-group"
ng-class="{'has-error': $ctrl.validationTrigger && (DateIntervalForm.dateFrom.$invalid || DateIntervalForm.dateTo.$invalid)}"
style="margin-bottom:0">
<label class="control-label">
<span translate>FORM.SELECT.DATE_INTERVAL</span>
<span translate>{{ $ctrl.label }}</span>
<span ng-if="$ctrl.selected" class="label label-warning" translate>{{ $ctrl.selected }}</span>
</label>
</div>
Expand Down

0 comments on commit c60ff99

Please sign in to comment.