Merge branch 'dev' of https://git.verdnatura.es/salix into dev

This commit is contained in:
Daniel Herrero 2017-11-16 15:06:04 +01:00
commit 96f1db5cb7
18 changed files with 170 additions and 71 deletions

2
Jenkinsfile vendored
View File

@ -43,7 +43,7 @@ node
stage ("Stopping/Removing Docker")
{
sh "docker-compose down --rmi all"
sh "docker-compose down --rmi 'all'"
}
stage ("Generar dockers")

View File

@ -48,7 +48,6 @@ export default class Controller {
onLoginErr(json) {
this.loading = false;
this.password = '';
this.focusUser();
let message;
@ -64,6 +63,7 @@ export default class Controller {
}
this.showMessage(message);
this.focusUser();
}
focusUser() {
this.$.userField.select();

View File

@ -7,6 +7,10 @@ import {module} from '../module';
* @property {Snackbar} snackbar The main object to show messages.
*/
export default class App {
constructor($rootScope) {
this.loaderStatus = 0;
this.$rootScope = $rootScope;
}
show(message) {
if (this.snackbar) this.snackbar.show({message: message});
}
@ -16,5 +20,17 @@ export default class App {
showError(message) {
this.show(`Error: ${message}`);
}
pushLoader() {
this.loaderStatus++;
if (this.loaderStatus === 1)
this.$rootScope.loading = true;
}
popLoader() {
this.loaderStatus--;
if (this.loaderStatus === 0)
this.$rootScope.loading = false;
}
}
App.$inject = ['$rootScope'];
module.service('vnApp', App);

View File

@ -0,0 +1,13 @@
import Component from './component';
/**
* Component that host an input.
*/
export default class Input extends Component {
select() {
this.input.select();
}
focus() {
this.input.focus();
}
}

View File

@ -1,11 +1,10 @@
import {module} from '../module';
interceptor.$inject = ['$q', '$rootScope', '$window', 'vnApp', '$translate', '$cookies'];
function interceptor($q, $rootScope, $window, vnApp, $translate, $cookies) {
$rootScope.loading = false;
interceptor.$inject = ['$q', '$window', 'vnApp', '$translate', '$cookies'];
function interceptor($q, $window, vnApp, $translate, $cookies) {
return {
request: function(config) {
$rootScope.loading = true;
vnApp.pushLoader();
let token = $cookies.get('vnToken');
if (token)
@ -23,11 +22,11 @@ function interceptor($q, $rootScope, $window, vnApp, $translate, $cookies) {
case 'PATCH':
vnApp.showMessage($translate.instant('Data saved!'));
}
$rootScope.loading = false;
vnApp.popLoader();
return response;
},
responseError: function(rejection) {
$rootScope.loading = false;
vnApp.popLoader();
let data = rejection.data;
let error;

View File

@ -4,8 +4,7 @@
ng-focus="$ctrl.hasFocus = true"
ng-blur="$ctrl.hasFocus = false"
ng-mouseenter="$ctrl.hasMouseIn = true"
ng-mouseleave="$ctrl.hasMouseIn = false"
>
ng-mouseleave="$ctrl.hasMouseIn = false">
<input
class="mdl-textfield__input"
type="{{$ctrl.type}}"
@ -13,11 +12,19 @@
ng-model="$ctrl.value"
vn-validation="{{$ctrl.rule}}"
ng-disabled="$ctrl.disabled"
ng-readonly="$ctrl.readonly"
/>
ng-readonly="$ctrl.readonly"/>
<div class="mdl-chip__action">
<i class="material-icons" ng-if="$ctrl.hasInfo" vn-tooltip="{{$ctrl.info}}" tooltip-position="up">info_outline</i>
<i class="material-icons pointer" ng-show="$ctrl.hasValue&&($ctrl.hasFocus||$ctrl.hasMouseIn)" ng-click="$ctrl.clear()">clear</i>
<i class="material-icons"
ng-if="$ctrl.hasInfo"
vn-tooltip="{{$ctrl.info}}"
tooltip-position="up">
info_outline
</i>
<i class="material-icons pointer"
ng-show="$ctrl.hasValue && ($ctrl.hasFocus || $ctrl.hasMouseIn)"
ng-click="$ctrl.clear()">
clear
</i>
</div>
<label class="mdl-textfield__label" translate>{{$ctrl.label}}</label>
</div>

View File

@ -1,9 +1,8 @@
import {module} from '../module';
import Component from '../lib/component';
import * as normalizerFactory from '../lib/inputAttrsNormalizer';
import Input from '../lib/input';
import './style.scss';
export default class TextfieldController extends Component {
export default class Textfield extends Input {
constructor($element, $scope, $attrs, $timeout, normalizer) {
super($element);
@ -15,45 +14,39 @@ export default class TextfieldController extends Component {
this.$timeout = $timeout;
this._value = null;
this.type = this.$attrs.type || 'text';
this.type = $attrs.type || 'text';
this.showActions = false;
this.input = $element[0].querySelector('input');
this.focus = false;
this.hasInfo = Boolean(this.$attrs.info);
this.info = this.$attrs.info || null;
this.hasInfo = Boolean($attrs.info);
this.info = $attrs.info || null;
this.hasFocus = false;
this.hasMouseIn = false;
componentHandler.upgradeElement($element[0].firstChild);
}
get value() {
return this._value;
}
set value(value) {
this._value = (value === undefined || value === '') ? null : value;
this.input.value = this._value;
this.hasValue = Boolean(this._value);
this.mdlUpdate();
}
mdlUpdate() {
let mdlField = this.$element[0].firstChild.MaterialTextfield;
if (mdlField)
mdlField.updateClasses_();
}
clear() {
this.value = null;
this.input.focus();
}
}
TextfieldController.$inject = ['$element', '$scope', '$attrs', '$timeout', normalizerFactory.NAME];
Textfield.$inject = ['$element', '$scope', '$attrs', '$timeout', 'vnInputAttrsNormalizer'];
module.component('vnTextfield', {
template: require('./textfield.html'),
controller: TextfieldController,
controller: Textfield,
bindings: {
value: '=model',
label: '@?',

View File

@ -3,7 +3,4 @@ var vnLoopback = require('../../loopback/server/server.js');
var app = module.exports = vnLoopback.loopback();
app.set('applications', require('./application.json'));
vnLoopback.boot(app, __dirname);
if (require.main === module) {
app.start();
}
vnLoopback.boot(app, __dirname, module);

View File

@ -11,7 +11,7 @@ module.exports = function(Self) {
let app = require('../../server/server');
let Employee = app.models.Employee;
Employee.findOne({where: {userFk: userId}}, function (err, user){
if (user){
if (user) {
ctx.instance.employeeFk = user.id;
next();
}

View File

@ -40,7 +40,7 @@ module.exports = function(Self) {
message: 'Correo electrónico inválido',
allowNull: true,
allowBlank: true,
with: /^[\w|\.|\-]+@\w[\w|\.|\-]*\w(,[\w|\.|\-]+@\w[\w|\.|\-]*\w)*$/
with: /^[\w|.|-]+@\w[\w|.|-]*\w(,[\w|.|-]+@\w[\w|.|-]*\w)*$/
});
Self.validatesLengthOf('postcode', {
allowNull: true,
@ -53,6 +53,11 @@ module.exports = function(Self) {
message: 'El iban no tiene el formato correcto'
});
let validateDni = require('../validations/validateDni');
Self.validateBinded('fi', validateDni, {
message: 'DNI Incorrecto'
});
Self.validate('payMethod', hasSalesMan, {
message: 'No se puede cambiar la forma de pago si no hay comercial asignado'
});

View File

@ -0,0 +1,94 @@
module.exports = fi => {
let dni = fi;
let getLetterDni = dni => {
const regExpDni = 'TRWAGMYFPDXBNJZSQVHLCKE';
const letterDni = dni.toUpperCase().substring(0, 1);
let positionLetter = parseInt(dni) % 23;
let getLetter = regExpDni.substring(positionLetter + 1, positionLetter);
switch (letterDni) {
case 'X': case 'Y': case 'Z':
positionLetter = parseInt(dni.replace(letterDni, letterDni.charCodeAt(0) - 88)) % 23;
getLetter = regExpDni.substring(positionLetter + 1, positionLetter);
console.log(letterDni.charCodeAt(0));
}
return getLetter;
};
let getDniSpain = (dniNumeric, dniLetter) => {
let returnValue = false;
switch (dni.length) {
case 9:
if (dniLetter === getLetterDni(dni))
returnValue = true;
}
return returnValue;
};
let getDniForeign = (dniNumeric, dniLetter) => {
let returnValue = false;
switch (dni.length) {
case 9:
if (dniLetter === getLetterDni(dni))
returnValue = true;
}
return returnValue;
};
let getDniBusiness = () => {
if (dni.length == 9)
return true;
return false;
};
let getDniFrance = dniLetterCountry => {
let returnValue = false;
switch (dni.length) {
case 13:
if (dniLetter === 'R')
returnValue = true;
}
return returnValue;
};
let getDniItaly = dniLetterCountry => {
let returnValue = false;
switch (dni.length) {
case 13:
if (dniLetter === 'T')
returnValue = true;
}
return returnValue;
};
let getDni = () => {
const dniNumeric = dni.substring(0, 8);
const dniLetter = dni.substring(8, 9);
const dniLetterCountry = dni.substring(0, 1);
const dniLetterAscii = parseInt(dniLetterCountry.charCodeAt(0));
let dniValue = false;
switch (true) {
case (dniLetterAscii >= 88 && dniLetterAscii <= 90): // X-Z
dniValue = getDniForeign(dniNumeric, dniLetter);
break;
case (dniLetterAscii === 66): // B
dniValue = getDniBusiness();
break;
case (dniLetterAscii === 70): // F
dniValue = getDniFrance(dniLetterCountry);
break;
case (dniLetterAscii === 73): // I
dniValue = getDniItaly(dniLetterCountry);
break;
case (dniLetterAscii >= 48 && dniLetterAscii <= 57): // 0- 9
console.log('dni spain');
dniValue = getDniSpain(dniNumeric, dniLetter);
break;
default:
console.log('default');
dniValue = true;
}
return dniValue;
};
return getDni();
};

View File

@ -13,7 +13,6 @@
"url": "https://git.verdnatura.es/salix"
},
"dependencies": {
"loopback-context": "^3.3.0",
"request": "^2.83.0"
}
}

View File

@ -2,7 +2,4 @@
var vnLoopback = require('../../loopback/server/server.js');
var app = module.exports = vnLoopback.loopback();
vnLoopback.boot(app, __dirname);
if (require.main === module) {
app.start();
}
vnLoopback.boot(app, __dirname, module);

View File

@ -1,13 +1,5 @@
var cors = require('cors');
var whitelist = ['http://localhost:8080'];
var corsOptions = {
origin: function(origin, callback) {
var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
callback(originIsWhitelisted ? null : 'Bad Request', originIsWhitelisted);
}
};
module.exports = function() {
return cors({origin: true});
};

View File

@ -10,7 +10,7 @@ module.exports = {
boot: vnBoot
};
function vnBoot(app, rootDir, cb) {
function vnBoot(app, rootDir, rootModule) {
// Internationalization
let i18nDir = rootDir + '/i18n';
@ -22,7 +22,7 @@ function vnBoot(app, rootDir, cb) {
});
app.get('/prueba', function(req, res) {
i18n.setLocale(req.get('Accept-Language').substring(0,2));
i18n.setLocale(req.get('Accept-Language').substring(0, 2));
res.send(i18n.__('Hello'));
});
}
@ -63,31 +63,28 @@ function vnBoot(app, rootDir, cb) {
modelSources: [
"loopback/common/models",
"loopback/server/models",
__dirname + "/../common/models",
__dirname + "/models",
path.join(__dirname, "../common/models"),
path.join(__dirname, "models"),
rootDir + "/../common/models",
rootDir + "/models"
],
mixinDirs: [
"loopback/common/mixins",
"loopback/server/mixins",
__dirname + "/../common/mixins",
__dirname + "/mixins",
path.join(__dirname, "../common/mixins"),
path.join(__dirname, "mixins"),
rootDir + "/../common/mixins",
rootDir + "/mixins"
],
bootDirs: [
__dirname + "/boot",
path.join(__dirname, "boot"),
rootDir + "/boot"
]
};
boot(app, bootOptions, function(err) {
if (err) throw err;
if (require.main === module) {
if (require.main === rootModule)
app.start();
}
if (cb)
cb(app);
});
}

View File

@ -1,7 +1,4 @@
var vnLoopback = require('../../loopback/server/server.js');
var app = module.exports = vnLoopback.loopback();
vnLoopback.boot(app, __dirname);
if (require.main === module) {
app.start();
}
vnLoopback.boot(app, __dirname, module);

View File

@ -2,7 +2,4 @@
var vnLoopback = require('../../loopback/server/server.js');
var app = module.exports = vnLoopback.loopback();
vnLoopback.boot(app, __dirname);
if (require.main === module) {
app.start();
}
vnLoopback.boot(app, __dirname, module);

View File

@ -10,8 +10,4 @@ app.set('url auth', '/auth');
app.use(cookieParser());
vnLoopback.boot(app, __dirname);
if (require.main === module) {
app.start();
}
vnLoopback.boot(app, __dirname, module);