+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/front/salix/components/bank-entity/index.js b/front/salix/components/bank-entity/index.js
index 192ebe046..d4ac8030a 100644
--- a/front/salix/components/bank-entity/index.js
+++ b/front/salix/components/bank-entity/index.js
@@ -1,35 +1,23 @@
import ngModule from '../../module';
-import Component from 'core/lib/component';
+import Dialog from 'core/components/dialog';
import './style.scss';
-class Controller extends Component {
- open() {
- this.$.bankEntityDialog.show();
- }
+class Controller extends Dialog {
+ responseHandler(response) {
+ if (response !== 'accept')
+ return super.responseHandler(response);
- resetData() {
- this.data = {};
- }
+ if (!this.data.countryFk)
+ throw new Error(`The country can't be empty`);
- onAccept() {
- try {
- if (!this.data.countryFk)
- throw new Error(`The country can't be empty`);
-
- this.$http.post(`bankEntities`, this.data).then(res => {
- this.vnApp.showMessage(this.$t('The bank entity has been created. You can save the data now'));
- this.emit('response', {$response: res.data});
- });
- } catch (e) {
- this.vnApp.showError(this.$t(e.message));
- return false;
- }
- return true;
+ return this.$http.post(`bankEntities`, this.data)
+ .then(() => super.responseHandler(response))
+ .then(() => this.vnApp.showSuccess(this.$t('Data saved!')));
}
}
ngModule.vnComponent('vnNewBankEntity', {
- template: require('./index.html'),
+ slotTemplate: require('./index.html'),
controller: Controller,
bindings: {
data: '<',
diff --git a/front/salix/components/bank-entity/index.spec.js b/front/salix/components/bank-entity/index.spec.js
index c288c3052..3c3de4c40 100644
--- a/front/salix/components/bank-entity/index.spec.js
+++ b/front/salix/components/bank-entity/index.spec.js
@@ -5,49 +5,34 @@ describe('Salix Component vnNewBankEntity', () => {
let $httpBackend;
let $scope;
let $element;
- let vnApp;
beforeEach(ngModule('salix'));
- beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _vnApp_) => {
+ beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
$httpBackend = _$httpBackend_;
- vnApp = _vnApp_;
- jest.spyOn(vnApp, 'showError');
$scope = $rootScope.$new();
- $element = angular.element('');
- controller = $componentController('vnNewBankEntity', {$element, $scope});
+ $element = angular.element('');
+ const $transclude = {
+ $$boundTransclude: {
+ $$slots: []
+ }
+ };
+ controller = $componentController('vnNewBankEntity', {$element, $scope, $transclude});
+ controller.vnApp = {showSuccess: jest.fn()};
}));
- describe('resetData()', () => {
- it('should reset the location in the controller', () => {
- expect(controller.data).toBeUndefined();
-
- controller.resetData();
-
- expect(controller.data).toEqual({});
- });
- });
-
- describe('onAccept()', () => {
- it('should throw an error if there is no country id in the location', () => {
- jest.spyOn(controller.vnApp, 'showMessage');
-
- controller.data = {};
-
- controller.onAccept();
-
- expect(controller.vnApp.showError).toHaveBeenCalledWith(`The country can't be empty`);
- });
-
- it('should do add the new bank entity', () => {
+ describe('responseHandler()', () => {
+ it('should show a success message after the query to bankEntities', () => {
controller.data = {
countryFk: 1
};
- $httpBackend.expectPOST('bankEntities', controller.data).respond(200, controller.data);
+ $httpBackend.expectPOST('bankEntities', controller.data).respond(200);
- controller.onAccept();
+ controller.responseHandler('accept');
$httpBackend.flush();
+
+ expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!');
});
});
});
diff --git a/front/salix/components/bank-entity/locale/es.yml b/front/salix/components/bank-entity/locale/es.yml
index fe5160572..874a42393 100644
--- a/front/salix/components/bank-entity/locale/es.yml
+++ b/front/salix/components/bank-entity/locale/es.yml
@@ -9,4 +9,5 @@ The country can't be empty: El país no puede quedar vacío
The postcode has been created. You can save the data now: Se ha creado el código postal. Ahora puedes guardar los datos
The city has been created: Se ha creado la ciudad
The province has been created: Se ha creado la provincia
-The bank entity has been created. You can save the data now: Se ha creado la entidad bancaria. Puedes guardar los datos ahora
\ No newline at end of file
+The bank entity has been created. You can save the data now: Se ha creado la entidad bancaria. Puedes guardar los datos ahora
+Entity code: Código de la entidad
\ No newline at end of file
diff --git a/front/salix/components/upload-photo/index.html b/front/salix/components/upload-photo/index.html
index 09b36d531..3dd6cdb27 100644
--- a/front/salix/components/upload-photo/index.html
+++ b/front/salix/components/upload-photo/index.html
@@ -4,7 +4,7 @@
message="Edit photo">
-
+
-
+
+
+
+
+
+
+
@@ -37,6 +51,14 @@
+
+
+
+ this.editor.bind({url: e.target.result});
- reader.readAsDataURL(value[0]);
+ if (this.uploadMethod == 'computer') {
+ const reader = new FileReader();
+ reader.onload = e => this.editor.bind({url: e.target.result});
+ reader.readAsDataURL(value);
+ } else if (this.uploadMethod == 'URL')
+ this.editor.bind({url: value});
}
}
diff --git a/front/salix/components/upload-photo/index.spec.js b/front/salix/components/upload-photo/index.spec.js
index e8ac05fd4..f2aad6a5c 100644
--- a/front/salix/components/upload-photo/index.spec.js
+++ b/front/salix/components/upload-photo/index.spec.js
@@ -24,17 +24,30 @@ describe('Salix', () => {
});
describe('viewportSelection()', () => {
- it('should call to displayEditor() and updatePhotoPreview() methods', () => {
- controller.displayEditor = jest.fn();
+ it('should call to the updatePhotoPreview() method when uploadMethod property is set to "computer"', () => {
controller.updatePhotoPreview = jest.fn();
const files = [{name: 'test.jpg'}];
controller.newPhoto.files = files;
+ controller.uploadMethod = 'computer';
controller.viewportSelection = {code: 'normal'};
- expect(controller.displayEditor).toHaveBeenCalledWith();
- expect(controller.updatePhotoPreview).toHaveBeenCalledWith(files);
+ const firstFile = files[0];
+
+ expect(controller.updatePhotoPreview).toHaveBeenCalledWith(firstFile);
+ });
+
+ it('should call to the updatePhotoPreview() method when uploadMethod property is set to "URL"', () => {
+ controller.updatePhotoPreview = jest.fn();
+
+ const url = 'http://gothamcity.com/batman.png';
+ controller.newPhoto.url = url;
+
+ controller.uploadMethod = 'URL';
+ controller.viewportSelection = {code: 'normal'};
+
+ expect(controller.updatePhotoPreview).toHaveBeenCalledWith(url);
});
});
diff --git a/front/salix/components/upload-photo/locale/es.yml b/front/salix/components/upload-photo/locale/es.yml
index bba3a985a..bcc3801d8 100644
--- a/front/salix/components/upload-photo/locale/es.yml
+++ b/front/salix/components/upload-photo/locale/es.yml
@@ -3,4 +3,6 @@ Select an image: Selecciona una imagen
File name: Nombre del fichero
Rotate left: Girar a la izquierda
Rotate right: Girar a la derecha
-Panoramic: Panorámico
\ No newline at end of file
+Panoramic: Panorámico
+Select from computer: Seleccionar desde ordenador
+Import from external URL: Importar desde URL externa
\ No newline at end of file
diff --git a/modules/client/front/billing-data/index.html b/modules/client/front/billing-data/index.html
index b9c20ec24..ff2e2f157 100644
--- a/modules/client/front/billing-data/index.html
+++ b/modules/client/front/billing-data/index.html
@@ -66,7 +66,7 @@
@@ -108,53 +108,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/modules/client/front/billing-data/index.js b/modules/client/front/billing-data/index.js
index 2dda347b9..7056fa566 100644
--- a/modules/client/front/billing-data/index.js
+++ b/modules/client/front/billing-data/index.js
@@ -37,17 +37,8 @@ export default class Controller extends Section {
return payMethod || iban || dueDay;
}
- onAddEntityClick(event) {
- event.preventDefault();
- this.newBankEntity = {
- countryFk: Number.parseInt(this.client.countryFk)
- };
- this.$.bankEntityDialog.show();
- }
-
- onBankEntityAccept() {
- return this.$http.post(`BankEntities`, this.newBankEntity)
- .then(res => this.client.bankEntityFk = res.data.id);
+ onAccept(data) {
+ this.client.bankEntityFk = data.id;
}
get ibanCountry() {
diff --git a/modules/client/front/billing-data/index.spec.js b/modules/client/front/billing-data/index.spec.js
index 95700cb5a..2e9e8ba97 100644
--- a/modules/client/front/billing-data/index.spec.js
+++ b/modules/client/front/billing-data/index.spec.js
@@ -35,20 +35,12 @@ describe('Client', () => {
});
});
- describe('onBankEntityAccept()', () => {
- it('should request to create a new bank entity', () => {
- let newBankEntity = {
- name: 'My new bank entity',
- bic: 'ES123',
- countryFk: 1,
- id: 999
- };
- controller.newBankEntity = newBankEntity;
- $httpBackend.expectPOST('BankEntities', newBankEntity).respond({id: 999});
- controller.onBankEntityAccept();
- $httpBackend.flush();
+ describe('onAccept()', () => {
+ it('should assign the response id to the client bankEntityFk', () => {
+ const expectedResponse = {id: 999};
+ controller.onAccept(expectedResponse);
- expect(controller.client.bankEntityFk).toEqual(newBankEntity.id);
+ expect(controller.client.bankEntityFk).toEqual(expectedResponse.id);
});
});
diff --git a/modules/client/front/billing-data/locale/es.yml b/modules/client/front/billing-data/locale/es.yml
index a7ecbbdae..0052ee403 100644
--- a/modules/client/front/billing-data/locale/es.yml
+++ b/modules/client/front/billing-data/locale/es.yml
@@ -14,5 +14,4 @@ Received core VNL: Recibido core VNL
Received B2B VNL: Recibido B2B VNL
Save: Guardar
New bank entity: Nueva entidad bancaria
-Name can't be empty: El nombre no puede quedar vacío
-Entity Code: Código
\ No newline at end of file
+Name can't be empty: El nombre no puede quedar vacío
\ No newline at end of file
diff --git a/modules/client/front/summary/index.html b/modules/client/front/summary/index.html
index 81f80d370..146bd16e5 100644
--- a/modules/client/front/summary/index.html
+++ b/modules/client/front/summary/index.html
@@ -5,7 +5,7 @@
filter="::$ctrl.ticketFilter"
limit="5"
data="tickets"
- order="shipped DESC">
+ order="shipped DESC, id">
@@ -293,7 +293,7 @@
IdNicknameAgency
- Route
+ RoutePackagesDateState
@@ -314,7 +314,7 @@
{{::ticket.nickname}}
-
+
{{::ticket.agencyMode.name}}
diff --git a/modules/entry/back/methods/entry/latestBuysFilter.js b/modules/entry/back/methods/entry/latestBuysFilter.js
index d59e34e64..cbf9e3b6a 100644
--- a/modules/entry/back/methods/entry/latestBuysFilter.js
+++ b/modules/entry/back/methods/entry/latestBuysFilter.js
@@ -115,7 +115,6 @@ module.exports = Self => {
const stmts = [];
let stmt;
- stmts.push('CALL cache.last_buy_refresh(FALSE)');
stmts.push('CALL cache.visible_refresh(@calc_id, FALSE, 1)');
stmt = new ParameterizedSQL(`
diff --git a/modules/item/back/methods/item/filter.js b/modules/item/back/methods/item/filter.js
index 7063c386e..cff36a223 100644
--- a/modules/item/back/methods/item/filter.js
+++ b/modules/item/back/methods/item/filter.js
@@ -127,7 +127,6 @@ module.exports = Self => {
filter = mergeFilters(filter, {where});
const stmts = [];
- stmts.push('CALL cache.last_buy_refresh(FALSE)');
const stmt = new ParameterizedSQL(
`SELECT
i.id,
diff --git a/modules/monitor/back/methods/sales-monitor/salesFilter.js b/modules/monitor/back/methods/sales-monitor/salesFilter.js
index 1546aee0e..6483a906a 100644
--- a/modules/monitor/back/methods/sales-monitor/salesFilter.js
+++ b/modules/monitor/back/methods/sales-monitor/salesFilter.js
@@ -223,7 +223,8 @@ module.exports = Self => {
MINUTE(z.hour) AS zoneMinute,
z.name AS zoneName,
z.id AS zoneFk,
- CAST(z.hour AS CHAR) AS hour
+ CAST(z.hour AS CHAR) AS hour,
+ TIME_FORMAT(zed.etc, '%H:%i') AS practicalHour
FROM ticket t
LEFT JOIN invoiceOut io ON t.refFk = io.ref
LEFT JOIN zone z ON z.id = t.zoneFk
@@ -235,7 +236,8 @@ module.exports = Self => {
LEFT JOIN state st ON st.id = ts.stateFk
LEFT JOIN client c ON c.id = t.clientFk
LEFT JOIN worker wk ON wk.id = c.salesPersonFk
- LEFT JOIN account.user u ON u.id = wk.userFk`);
+ LEFT JOIN account.user u ON u.id = wk.userFk
+ LEFT JOIN zoneEstimatedDelivery zed ON zed.zoneFk = t.zoneFk`);
if (args.orderFk) {
stmt.merge({
diff --git a/modules/monitor/front/index/locale/es.yml b/modules/monitor/front/index/locale/es.yml
index 160392245..4eef3c93f 100644
--- a/modules/monitor/front/index/locale/es.yml
+++ b/modules/monitor/front/index/locale/es.yml
@@ -6,4 +6,6 @@ Delete selected elements: Eliminar los elementos seleccionados
All the selected elements will be deleted. Are you sure you want to continue?: Todos los elementos seleccionados serán eliminados. ¿Seguro que quieres continuar?
Component lack: Faltan componentes
Minimize/Maximize: Minimizar/Maximizar
-Problems: Problemas
\ No newline at end of file
+Problems: Problemas
+Theoretical: Teórica
+Practical: Práctica
\ No newline at end of file
diff --git a/modules/monitor/front/index/tickets/index.html b/modules/monitor/front/index/tickets/index.html
index 2d2c5fa78..82adf2765 100644
--- a/modules/monitor/front/index/tickets/index.html
+++ b/modules/monitor/front/index/tickets/index.html
@@ -37,8 +37,9 @@
ClientSalespersonDate
- Hour
- Closure
+ Prep.
+ Theoretical
+ PracticalProvinceStateZone
@@ -112,6 +113,7 @@
{{::ticket.shipped | date: 'HH:mm'}}{{::ticket.zoneLanding | date: 'HH:mm'}}
+ {{::ticket.practicalHour | date: 'HH:mm'}}{{::ticket.province}}
+ vn-click-stop="bankEntity.show({index: $index})"
+ vn-tooltip="New bank entity">
+
+ on-accept="$ctrl.onAccept($data)">
\ No newline at end of file
diff --git a/modules/supplier/front/account/index.js b/modules/supplier/front/account/index.js
index 26f4af988..1e21b983e 100644
--- a/modules/supplier/front/account/index.js
+++ b/modules/supplier/front/account/index.js
@@ -18,23 +18,10 @@ class Controller extends Section {
});
}
- onResponse(response) {
- const data = this.$.model.data;
- const supplierAccount = data[this.currentRowIndex];
- supplierAccount.bankEntityFk = response.id;
- }
-
- showBankEntity(event, $index) {
- if (event.defaultPrevented) return;
- event.preventDefault();
- this.currentRowIndex = $index;
- this.$.bankEntity.open();
- }
-
- onBankEntityAccept() {
- const query = `SupplierAccounts/${this.$params.id}/createBankEntity`;
- return this.$http.patch(query, this.newBankEntity)
- .then(res => this.supplierAccount.bankEntityFk = res.data.id);
+ onAccept(data) {
+ const accounts = this.supplierAccounts;
+ const targetAccount = accounts[data.index];
+ targetAccount.bankEntityFk = data.id;
}
onSubmit() {
diff --git a/modules/supplier/front/account/index.spec.js b/modules/supplier/front/account/index.spec.js
index ca1671207..77d135f24 100644
--- a/modules/supplier/front/account/index.spec.js
+++ b/modules/supplier/front/account/index.spec.js
@@ -4,11 +4,9 @@ describe('Supplier Component vnSupplierAccount', () => {
let $scope;
let $element;
let controller;
- let $httpBackend;
beforeEach(ngModule('supplier'));
beforeEach(inject(($componentController, $rootScope, _$httpBackend_) => {
- $httpBackend = _$httpBackend_;
$scope = $rootScope.$new();
$scope.bankEntity = {
open: () => {}
@@ -21,50 +19,20 @@ describe('Supplier Component vnSupplierAccount', () => {
};
}));
- describe('showBankEntity()', () => {
- it('should do nothing if it default is prevented', () => {
- const event = {
- defaultPrevented: true,
- preventDefault: () => {}
- };
- jest.spyOn(event, 'preventDefault');
- jest.spyOn(controller.$.bankEntity, 'open');
+ describe('onAccept()', () => {
+ it('should set the created bank entity id into the target account', () => {
+ controller.supplierAccounts = [{}, {}, {}];
- controller.showBankEntity(event);
-
- expect(event.preventDefault).not.toHaveBeenCalledWith();
- expect(controller.$.bankEntity.open).not.toHaveBeenCalledWith();
- });
-
- it('should call preventDefault() and open() when the default is not prevented', () => {
- const event = {
- defaultPrevented: false,
- preventDefault: () => {}
+ const data = {
+ id: 999,
+ index: 1
};
- jest.spyOn(event, 'preventDefault');
- jest.spyOn(controller.$.bankEntity, 'open');
+ controller.onAccept(data);
- controller.showBankEntity(event);
+ const targetAccount = controller.supplierAccounts[data.index];
- expect(event.preventDefault).toHaveBeenCalledWith();
- expect(controller.$.bankEntity.open).toHaveBeenCalledWith();
- });
-
- it('should request to create a new bank entity', () => {
- controller.bankEntity = {
- name: 'My new bank entity',
- bic: 'ES1234',
- countryFk: 1,
- id: 2200
- };
-
- const query = `SupplierAccounts/${controller.$.bankEntity.id}/createBankEntity`;
- $httpBackend.expectPATCH(query).respond({id: 2200});
- controller.onBankEntityAccept();
- $httpBackend.flush();
-
- expect(controller.supplierAccount.bankEntityFk).toEqual(controller.bankEntity.id);
+ expect(targetAccount.bankEntityFk).toEqual(data.id);
});
});
});
diff --git a/modules/ticket/front/main/index.html b/modules/ticket/front/main/index.html
index 8e9af1e12..590d33887 100644
--- a/modules/ticket/front/main/index.html
+++ b/modules/ticket/front/main/index.html
@@ -2,7 +2,7 @@
vn-id="model"
url="Tickets/filter"
limit="20"
- order="shippedDate DESC, shippedHour ASC, zoneLanding ASC">
+ order="shippedDate DESC, shippedHour ASC, zoneLanding ASC, id">
{
AND t.refFk IS NULL
GROUP BY e.ticketFk`, [reqArgs.routeId]);
const ticketIds = tickets.map(ticket => ticket.id);
-
await closeAll(ticketIds, reqArgs);
+
+ // Send route report to the agency
+ const agencyMail = await db.findValue(`
+ SELECT am.reportMail
+ FROM route r
+ JOIN agencyMode am ON am.id = r.agencyModeFk
+ WHERE r.id = ?`, [reqArgs.routeId]);
+
+ if (agencyMail) {
+ const args = Object.assign({
+ routeId: reqArgs.routeId,
+ recipient: agencyMail
+ }, reqArgs);
+
+ const email = new Email('driver-route', args);
+ await email.send();
+ }
} catch (error) {
next(error);
}
diff --git a/print/templates/email/claim-pickup-order/locale/es.yml b/print/templates/email/claim-pickup-order/locale/es.yml
index 1d49b2b2b..fe08fb0a8 100644
--- a/print/templates/email/claim-pickup-order/locale/es.yml
+++ b/print/templates/email/claim-pickup-order/locale/es.yml
@@ -2,22 +2,4 @@ subject: Orden de recogida
title: Orden de recogida
description:
dear: Estimado cliente
- instructions: Aqui tienes tu orden de recogida.
-sections:
- howToBuy:
- title: Cómo hacer un pedido
- description: 'Para realizar un pedido en nuestra web, debes configurarlo indicando:'
- requeriments:
- - Si quieres recibir el pedido (por agencia o por nuestro propio reparto) o si
- lo prefieres recoger en alguno de nuestros almacenes.
- - La fecha en la que quieres recibir el pedido (se preparará el día anterior).
- - La dirección de entrega o el almacén donde quieres recoger el pedido.
- stock: En nuestra web y aplicaciones puedes visualizar el stock disponible de
- flor cortada, verdes, plantas, complementos y artificial. Ten en cuenta que
- dicho stock puede variar en función de la fecha seleccionada al configurar el
- pedido. Es importante CONFIRMAR los pedidos para que la mercancía quede reservada.
- delivery: El reparto se realiza de lunes a sábado según la zona en la que te encuentres.
- Por regla general, los pedidos que se entregan por agencia, deben estar confirmados
- y pagados antes de las 17h del día en que se preparan (el día anterior a recibirlos),
- aunque esto puede variar si el pedido se envía a través de nuestro reparto y
- según la zona.
+ instructions: Aqui tienes tu orden de recogida.
\ No newline at end of file