Merge pull request '2603-travel_create_autocomplete_date' (#547) from 2603-travel_create_autocomplete_date into dev
gitea/salix/pipeline/head This commit looks good Details

Reviewed-on: #547
Reviewed-by: Carlos Jimenez Ruiz <carlosjr@verdnatura.es>
This commit is contained in:
Carlos Jimenez Ruiz 2021-02-12 16:32:51 +00:00
commit c6333e7982
7 changed files with 102 additions and 6 deletions

View File

@ -167,10 +167,12 @@
"You can't upload images on the test environment": "No puedes subir imágenes en el entorno de pruebas", "You can't upload images on the test environment": "No puedes subir imágenes en el entorno de pruebas",
"The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta", "The selected ticket is not suitable for this route": "El ticket seleccionado no es apto para esta ruta",
"Sorts whole route": "Reordena ruta entera", "Sorts whole route": "Reordena ruta entera",
"Invalid account": "Cuenta inválida", "New ticket request has been created with price": "Se ha creado una nueva petición de compra '{{description}}' para el día <strong>{{shipped}}</strong>, con una cantidad de <strong>{{quantity}}</strong> y un precio de <strong>{{price}} €</strong>",
"New ticket request has been created with price": "Se ha creado una nueva petición de compra *'{{description}}'* para el día *{{shipped}}*, con una cantidad de *{{quantity}}* y un precio de *{{price}} €*", "New ticket request has been created": "Se ha creado una nueva petición de compra '{{description}}' para el día <strong>{{shipped}}</strong>, con una cantidad de <strong>{{quantity}}</strong>",
"New ticket request has been created": "Se ha creado una nueva petición de compra *'{{description}}'* para el día *{{shipped}}*, con una cantidad de *{{quantity}}*", "Swift / BIC cannot be empty": "Swift / BIC no puede estar vacío",
"This BIC already exist.": "Este BIC ya existe.",
"That item doesn't exists": "Ese artículo no existe", "That item doesn't exists": "Ese artículo no existe",
"There's a new urgent ticket": "Hay un nuevo ticket urgente: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})", "There's a new urgent ticket": "Hay un nuevo ticket urgente: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
"Invalid account": "Cuenta inválida",
"Compensation account is empty": "La cuenta para compensar está vacia" "Compensation account is empty": "La cuenta para compensar está vacia"
} }

View File

@ -1,8 +1,11 @@
module.exports = Self => { module.exports = Self => {
Self.validatesPresenceOf('name', { Self.validatesPresenceOf('name', {
message: `Name cannot be blank` message: 'Name cannot be blank'
}); });
Self.validatesPresenceOf('bic', { Self.validatesPresenceOf('bic', {
message: `Swift / BIC can't be empty` message: 'Swift / BIC cannot be empty'
});
Self.validatesUniquenessOf('bic', {
message: 'This BIC already exist.'
}); });
}; };

View File

@ -0,0 +1,32 @@
module.exports = Self => {
Self.remoteMethod('getAverageDays', {
description: 'Returns the average days duration and the two warehouses of the travel.',
accessType: 'READ',
accepts: [{
arg: 'agencyModeFk',
type: 'number',
required: true
}],
returns: {
type: 'number',
root: true
},
http: {
path: `/getAverageDays`,
verb: 'GET'
}
});
Self.getAverageDays = async agencyModeFk => {
const query = `
SELECT t.id, t.warehouseInFk, t.warehouseOutFk,
(SELECT ROUND(AVG(DATEDIFF(t.landed, t.shipped )))
FROM travel t
WHERE t.agencyFk = ? LIMIT 50) AS dayDuration
FROM travel t
WHERE t.agencyFk = ? ORDER BY t.id DESC LIMIT 1;`;
const [avgDays] = await Self.rawSql(query, [agencyModeFk, agencyModeFk]);
return avgDays;
};
};

View File

@ -8,6 +8,7 @@ module.exports = Self => {
require('../methods/travel/deleteThermograph')(Self); require('../methods/travel/deleteThermograph')(Self);
require('../methods/travel/updateThermograph')(Self); require('../methods/travel/updateThermograph')(Self);
require('../methods/travel/extraCommunityFilter')(Self); require('../methods/travel/extraCommunityFilter')(Self);
require('../methods/travel/getAverageDays')(Self);
require('../methods/travel/cloneWithEntries')(Self); require('../methods/travel/cloneWithEntries')(Self);
Self.rewriteDbError(function(err) { Self.rewriteDbError(function(err) {

View File

@ -20,6 +20,7 @@
</vn-horizontal> </vn-horizontal>
<vn-horizontal> <vn-horizontal>
<vn-date-picker <vn-date-picker
on-change="$ctrl.onShippedChange(value)"
label="Shipped" label="Shipped"
ng-model="$ctrl.travel.shipped"> ng-model="$ctrl.travel.shipped">
</vn-date-picker> </vn-date-picker>

View File

@ -7,6 +7,31 @@ class Controller extends Section {
this.travel = JSON.parse(this.$params.q); this.travel = JSON.parse(this.$params.q);
} }
onShippedChange(value) {
let hasFilledProperties;
let hasAgencyMode;
if (this.travel) {
hasAgencyMode = Boolean(this.travel.agencyModeFk);
hasFilledProperties = this.travel.landed || this.travel.warehouseInFk || this.travel.warehouseOutFk;
}
if (!hasAgencyMode || hasFilledProperties)
return;
const query = `travels/getAverageDays`;
const params = {
agencyModeFk: this.travel.agencyModeFk
};
this.$http.get(query, {params}).then(res => {
const landed = new Date(value);
const futureDate = landed.getDate() + res.data.dayDuration;
landed.setDate(futureDate);
this.travel.landed = landed;
this.travel.warehouseInFk = res.data.warehouseInFk;
this.travel.warehouseOutFk = res.data.warehouseOutFk;
});
}
onSubmit() { onSubmit() {
return this.$.watcher.submit().then( return this.$.watcher.submit().then(
res => this.$state.go('travel.card.basicData', {id: res.data.id}) res => this.$state.go('travel.card.basicData', {id: res.data.id})

View File

@ -5,10 +5,12 @@ describe('Travel Component vnTravelCreate', () => {
let $scope; let $scope;
let $state; let $state;
let controller; let controller;
let $httpBackend;
beforeEach(ngModule('travel')); beforeEach(ngModule('travel'));
beforeEach(inject(($componentController, $rootScope, _$state_) => { beforeEach(inject(($componentController, $rootScope, _$state_, _$httpBackend_) => {
$httpBackend = _$httpBackend_;
$scope = $rootScope.$new(); $scope = $rootScope.$new();
$state = _$state_; $state = _$state_;
$scope.watcher = watcher; $scope.watcher = watcher;
@ -38,4 +40,34 @@ describe('Travel Component vnTravelCreate', () => {
expect(controller.travel).toEqual(json); expect(controller.travel).toEqual(json);
}); });
}); });
describe('onShippedChange()', () => {
it(`should do nothing if there's no agencyModeFk in the travel.`, () => {
controller.travel = {};
controller.onShippedChange();
expect(controller.travel.landed).toBeUndefined();
expect(controller.travel.warehouseInFk).toBeUndefined();
expect(controller.travel.warehouseOutFk).toBeUndefined();
});
it(`should fill the fields when it's selected a date and agency.`, () => {
controller.travel = {agencyModeFk: 1};
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
const expectedResponse = {
dayDuration: 2,
warehouseInFk: 1,
warehouseOutFk: 2
};
const query = `travels/getAverageDays?agencyModeFk=${controller.travel.agencyModeFk}`;
$httpBackend.expectGET(query).respond(expectedResponse);
controller.onShippedChange(tomorrow);
$httpBackend.flush();
expect(controller.travel.warehouseInFk).toEqual(expectedResponse.warehouseInFk);
expect(controller.travel.warehouseOutFk).toEqual(expectedResponse.warehouseOutFk);
});
});
}); });