This commit is contained in:
Carlos Jimenez Ruiz 2019-02-20 12:50:02 +01:00
commit f21b88840c
43 changed files with 132 additions and 224 deletions

View File

@ -32,9 +32,6 @@
"Sip": {
"dataSource": "vn"
},
"Route": {
"dataSource": "vn"
},
"Vehicle": {
"dataSource": "vn"
},

View File

@ -1,19 +0,0 @@
{
"name": "Route",
"base": "VnModel",
"options": {
"mysql": {
"table": "route"
}
},
"properties": {
"id": {
"type": "Number",
"id": true,
"description": "Identifier"
},
"date": {
"type": "date"
}
}
}

View File

@ -490,6 +490,7 @@ export default {
orderBasicData: {
clientAutocomplete: `vn-autocomplete[label="Client"]`,
addressAutocomplete: `vn-autocomplete[label="Address"]`,
agencyAutocomplete: `vn-autocomplete[label="Agency"]`,
observationInput: `vn-textarea[label="Observation"] textarea`,
saveButton: `${components.vnSubmit}`
},

View File

@ -64,6 +64,7 @@ describe('Order edit basic data path', () => {
const result = await nightmare
.autocompleteSearch(selectors.orderBasicData.clientAutocomplete, 'Tony Stark')
.autocompleteSearch(selectors.orderBasicData.addressAutocomplete, 'Tony Stark')
.autocompleteSearch(selectors.orderBasicData.agencyAutocomplete, 'Silla247')
.clearInput(selectors.orderBasicData.observationInput)
.write(selectors.orderBasicData.observationInput, 'Observation modified')
.waitToClick(selectors.orderBasicData.saveButton)
@ -80,6 +81,13 @@ describe('Order edit basic data path', () => {
expect(result).toEqual('104: Tony Stark');
});
it('should now confirm the agency have been edited', async() => {
const result = await nightmare
.waitToGetProperty(`${selectors.orderBasicData.agencyAutocomplete} input`, 'value');
expect(result).toEqual('7: Silla247');
});
it('should now confirm the observations have been edited', async() => {
const result = await nightmare
.waitToGetProperty(selectors.orderBasicData.observationInput, 'value');

View File

@ -18,4 +18,8 @@ vn-check {
md-checkbox {
margin-bottom: 0
}
md-checkbox .md-label {
margin-bottom: .5em;
}
}

View File

@ -1,5 +1,8 @@
<vn-horizontal>
<vn-one>{{::$ctrl.title}}</vn-one>
<vn-one
title="{{::$ctrl.title}}">
{{::$ctrl.title}}
</vn-one>
<vn-auto>
<section
class="inline-tag ellipsize"

View File

@ -26,7 +26,7 @@ class Icon {
Icon.$inject = ['$attrs'];
ngModule.component('vnIcon', {
template: '<i class="{{::$ctrl.iconClass}}">{{::$ctrl.iconContent}}</i>',
template: '<i class="{{::$ctrl.iconClass}} unselectable">{{::$ctrl.iconContent}}</i>',
controller: Icon,
bindings: {
icon: '@'

View File

@ -2,6 +2,7 @@ vn-icon {
display: inline-block;
font-size: 18pt;
text-align: center;
outline: 0;
& > i,
& > i.material-icons {

View File

@ -23,28 +23,6 @@ export default class Treeview extends Component {
});
}
/* hasCheckedChilds(node) {
if (!node.childs) return false;
const childs = node.childs;
for (let i = 0; i < childs.length; i++) {
if (childs[i].selected || this.hasCheckedChilds(childs[i]))
return true;
}
return false;
}
hasCheckedParents(node) {
if (!node.parent) return false;
const parent = node.parent;
if (parent.selected || this.hasCheckedParents(parent))
return true;
return false;
} */
onSelection(item, value) {
this.emit('selection', {item, value});
}
@ -67,12 +45,15 @@ export default class Treeview extends Component {
}
item.childs = newData.sort((a, b) => {
let priority = (b.isIncluded - a.isIncluded) - 1;
if (b.isIncluded !== a.isIncluded) {
if (a.isIncluded == null)
return 1;
if (b.isIncluded == null)
return -1;
return b.isIncluded - a.isIncluded;
}
if (b.name > a.name)
priority++;
return priority;
return a.name.localeCompare(b.name);
});
});
}

View File

@ -116,16 +116,7 @@ module.exports = Self => {
const parentNodes = nodes.filter(element => {
return element.depth === minorDepth;
});
const sortedLeaves = parentNodes.sort((a, b) => {
let priority = (b.isIncluded - a.isIncluded) - 1;
if (b.name > a.name)
priority++;
return priority;
});
const leaves = Object.assign([], sortedLeaves);
const leaves = Object.assign([], sortNodes(parentNodes));
nestLeaves(leaves);
@ -143,9 +134,23 @@ module.exports = Self => {
&& element.depth === parent.depth + 1;
});
return elements;
return sortNodes(elements);
}
return leaves;
};
function sortNodes(nodes) {
return nodes.sort((a, b) => {
if (b.isIncluded !== a.isIncluded) {
if (a.isIncluded == null)
return 1;
if (b.isIncluded == null)
return -1;
return b.isIncluded - a.isIncluded;
}
return a.name.localeCompare(b.name);
});
}
};

View File

@ -4,7 +4,7 @@ Social name: Razón social
Phone: Teléfono
Mobile: Móvil
Fax: Fax
Email: Correo electrónico
Email: E-mail
Salesperson: Comercial
Channel: Canal
You can save multiple emails: >-

View File

@ -2,7 +2,7 @@ Name: Nombre
Tax number: NIF/CIF
Business name: Razón social
Web user: Usuario Web
Email: Correo electrónico
Email: E-mail
Create and edit: Crear y editar
You can save multiple emails: >-
Puede guardar varios correos electrónicos encadenándolos mediante comas

View File

@ -1,5 +1,5 @@
Client id: Id cliente
Phone: Teléfono
Town/City: Ciudad
Email: Correo electrónico
Email: E-mail
View client: Ver cliente

View File

@ -4,5 +4,5 @@ Name: Nombre
Social name: Razon social
Town/City: Ciudad
Postcode: Código postal
Email: Correo electrónico
Email: E-mail
Phone: Teléfono

View File

@ -23,11 +23,11 @@ module.exports = Self => {
}
});
Self.getVisibleAvailable = async(itemFk, warehouseFk) => {
Self.getVisibleAvailable = async(id, warehouseFk) => {
let query = `
CALL vn.getItemVisibleAvailable(?,curdate(),?,?)`;
let options = [itemFk, warehouseFk, false];
let options = [id, warehouseFk, false];
[res] = await Self.rawSql(query, options);
return {

View File

@ -34,20 +34,21 @@ class Controller {
set item(value) {
this._item = value;
this.updateStock();
if (value && value.itemType && value.itemType.warehouseFk)
this.updateStock(value.itemType.warehouseFk);
}
get item() {
return this._item;
}
updateStock() {
updateStock(warehouseFk) {
this.available = null;
this.visible = null;
if (this._item && this._item.id) {
let options = {
params: {
warehouseFk: this._warehouseFk
warehouseFk: warehouseFk
}
};
this.$http.get(`/item/api/Items/${this._item.id}/getVisibleAvailable`, options).then(response => {
@ -81,7 +82,7 @@ class Controller {
warehouseFk: this.warehouseFk
}).then(res => {
this.vnApp.showSuccess(this.$translate.instant('Data saved!'));
this.updateStock();
this.updateStock(this.item.itemType.warehouseFk);
});
}
}

View File

@ -72,7 +72,6 @@
{{::item.userNickname}}
</span>
</vn-td>
<vn-td>{{::item.density}}</vn-td>
<vn-td number>{{::item.density}}</vn-td>
<vn-td>{{::item.taxClass}}</vn-td>
<vn-td>

View File

@ -1,5 +1,4 @@
import ngModule from '../module';
import './product';
import './style.scss';
class Controller {

View File

@ -1,38 +0,0 @@
<a
ui-sref="item.card.summary({id: $ctrl.item.id})"
translate-attr="{title: 'View item'}"
class="vn-list-item">
<vn-horizontal ng-click="$ctrl.onClick($event)">
<vn-auto margin-medium-right>
<vn-one>
<img
class="image"
ng-src="//verdnatura.es/vn-image-data/catalog/200x200/{{::$ctrl.item.image}}"
zoom-image="//verdnatura.es/vn-image-data/catalog/1600x900/{{::$ctrl.item.image}}" on-error-src/>
</vn-one>
</vn-auto>
<vn-one>
<h6>{{::$ctrl.item.id}} - {{::$ctrl.item.name}}</h6>
<vn-label-value label="Type"
value="{{::$ctrl.item.type}}">
</vn-label-value>
<vn-label-value label="Buyer"
value="{{::$ctrl.item.userNickname}}">
</vn-label-value>
<vn-fetched-tags max-length="4" item="$ctrl.item" class="noTitle"/>
</vn-one>
<vn-horizontal class="buttons">
<vn-icon
ng-click="$ctrl.clone($event)"
vn-tooltip="Clone"
icon="icon-clone">
</vn-icon>
<vn-icon
ng-click="$ctrl.preview($event)"
vn-tooltip="Preview"
icon="desktop_windows">
</vn-icon>
</vn-horizontal>
</vn-horizontal>
</a>

View File

@ -1,49 +0,0 @@
import ngModule from '../module';
class ItemProduct {
onClick(event) {
if (event.defaultPrevented)
event.stopImmediatePropagation();
}
set item(value) {
if (value) {
let tags = [];
for (let i = 5; i < 9; i++) {
if (value['tag' + i]) {
let tagValue = value['value' + i];
let tagKey = value['tag' + i];
tags.push({tag: {name: tagKey}, value: tagValue});
}
}
value.tags = tags;
}
this._item = value;
}
get item() {
return this._item;
}
clone(event) {
event.preventDefault();
this.index.cloneItem(this.item);
}
preview(event) {
event.preventDefault();
this.index.showItemPreview(this.item);
}
}
ngModule.component('vnItemProduct', {
template: require('./product.html'),
bindings: {
item: '<'
},
controller: ItemProduct,
require: {
index: '^vnItemIndex'
}
});

View File

@ -1,31 +1,5 @@
@import "variables";
vn-item-product {
display: block;
.id {
background-color: $color-main;
color: $color-font-dark;
margin-bottom: 0em;
}
.image {
height: 7em;
width: 7em;
& > img {
max-height: 100%;
max-width: 100%;
border-radius: .2em;
}
}
vn-label-value:first-of-type section{
margin-top: 0.6em;
}
vn-fetched-tags vn-horizontal{
margin-top: 0.9em;
}
}
vn-table {
img {
border-radius: 50%;

View File

@ -36,15 +36,21 @@
<vn-td number>
<span ng-click="$ctrl.showDescriptor($event, row.itemFk)"
class="link">
{{row.itemFk | zeroFill:6}}
{{::row.itemFk | zeroFill:6}}
</span>
</vn-td>
<vn-td expand><vn-fetched-tags max-length="6" item="row.item"/></vn-td>
<vn-td>{{row.warehouse.name}}</vn-td>
<vn-td>{{row.shipped | date: 'dd/MM/yyyy'}}</vn-td>
<vn-td number>{{row.quantity}}</vn-td>
<vn-td expand>
<vn-fetched-tags
max-length="6"
item="::row.item"
title="::row.item.name">
</vn-fetched-tags>
</vn-td>
<vn-td>{{::row.warehouse.name}}</vn-td>
<vn-td>{{::row.shipped | date: 'dd/MM/yyyy'}}</vn-td>
<vn-td number>{{::row.quantity}}</vn-td>
<vn-td number>
{{row.price | currency: 'EUR':2}}
{{::row.price | currency: 'EUR':2}}
</vn-td>
<vn-td shrink ng-if="!$ctrl.order.isConfirmed">
<vn-icon-button

View File

@ -65,10 +65,16 @@
<span
ng-click="$ctrl.showDescriptor($event, row.itemFk)"
class="link">
{{row.itemFk | zeroFill:6}}
{{::row.itemFk | zeroFill:6}}
</span>
</vn-td>
<vn-td expand><vn-fetched-tags max-length="6" item="row.item"/></vn-td>
<vn-td expand>
<vn-fetched-tags
max-length="6"
item="::row.item"
title="::row.item.name">
</vn-fetched-tags>
</vn-td>
<vn-td number>{{::row.quantity}}</vn-td>
<vn-td number>{{::row.price | currency: 'EUR':2}}</vn-td>
<vn-td number>{{::row.quantity * row.price | currency: 'EUR':2}}</vn-td>

View File

@ -38,7 +38,13 @@
{{::row.itemFk}}
</span>
</vn-td>
<vn-td><vn-fetched-tags max-length="6" item="row.item"/></vn-td>
<vn-td expand>
<vn-fetched-tags
max-length="6"
item="::row.item"
title="::row.item.name">
</vn-fetched-tags>
</vn-td>
<vn-td number>{{::row.quantity}}</vn-td>
<vn-td number>{{::row.volume | number:3}}</vn-td>
</vn-tr>

View File

@ -48,7 +48,11 @@
</span>
</td>
<td rowspan="{{::sale.components.length + 1}}">
<vn-fetched-tags max-length="6" item="sale.item"/>
<vn-fetched-tags
max-length="6"
item="::sale.item"
title="::sale.concept">
</vn-fetched-tags>
</td>
<td rowspan="{{::sale.components.length + 1}}" number>
{{::sale.quantity}}

View File

@ -15,7 +15,13 @@
<tbody>
<tr ng-repeat="sale in $ctrl.ticket.sale.items track by sale.id">
<td number>{{("000000"+sale.itemFk).slice(-6)}}</td>
<td><vn-fetched-tags max-length="6" item="sale.item"/></td>
<td expand>
<vn-fetched-tags
max-length="6"
item="::sale.item"
title="::sale.concept">
</vn-fetched-tags>
</td>
<td number>{{::sale.quantity}}</td>
<td number>{{::sale.price | currency: 'EUR': 2}}</td>
<td number>{{::sale.component.newPrice | currency: 'EUR': 2}}</td>

View File

@ -30,10 +30,16 @@
<span
ng-click="$ctrl.showDescriptor($event, sale.itemFk)"
class="link">
{{sale.itemFk | zeroFill:6}}
{{::sale.itemFk | zeroFill:6}}
</span>
</vn-td>
<vn-td><vn-fetched-tags max-length="6" item="sale.item"/></vn-td>
<vn-td expand>
<vn-fetched-tags
max-length="6"
item="::sale.item"
title="::sale.concept">
</vn-fetched-tags>
</vn-td>
<vn-td number>{{::sale.quantity}}</vn-td>
</vn-tr>
</vn-tbody>

View File

@ -37,7 +37,13 @@
{{sale.itemFk | zeroFill:6}}
</span>
</vn-td>
<vn-td><vn-fetched-tags max-length="6" item="sale.item"/></vn-td>
<vn-td expand>
<vn-fetched-tags
max-length="6"
item="::sale.item"
title="::sale.concept">
</vn-fetched-tags>
</vn-td>
<vn-td>{{::sale.quantity}}</vn-td>
<vn-td>{{::sale.originalQuantity}}</vn-td>
<vn-td expand>

View File

@ -108,7 +108,11 @@
</span>
</vn-td>
<vn-td expand>
<vn-fetched-tags max-length="6" item="sale.tags" title="sale.concept"/>
<vn-fetched-tags
max-length="6"
item="::sale.tags"
title="::sale.concept">
</vn-fetched-tags>
</vn-td>
<vn-td ng-if="!$ctrl.isEditable" number>{{sale.quantity}}</vn-td>
<vn-td ng-if="$ctrl.isEditable" number>

View File

@ -38,7 +38,7 @@
{{sale.itemFk | zeroFill:6}}
</span>
</vn-td>
<vn-td expand><vn-fetched-tags max-length="6" item="sale.item"/></vn-td>
<vn-td expand><vn-fetched-tags max-length="6" item="::sale.item" title="::sale.concept"/></vn-td>
<vn-td number>{{::sale.quantity}}</vn-td>
<vn-td number>{{::sale.volume.m3 | number:3}}</vn-td>
</vn-tr>

View File

@ -19,10 +19,8 @@ class Controller {
{
relation: 'user',
scope: {fields: ['name', 'email']}
}, {
relation: 'client',
scope: {fields: ['fi']}
}, {
},
{
relation: 'sip',
scope: {fields: ['extension']}
}, {

View File

@ -23,9 +23,6 @@
<vn-label-value label="Email"
value="{{$ctrl.worker.user.email}}">
</vn-label-value>
<vn-label-value label="Fiscal identifier"
value="{{$ctrl.worker.client.fi}}">
</vn-label-value>
<vn-label-value label="Department"
value="{{$ctrl.worker.department.department.name}}">
</vn-label-value>

View File

@ -17,8 +17,7 @@
"url": "/index?q",
"state": "worker.index",
"component": "vn-worker-index",
"description": "Workers",
"acl": ["developer"]
"description": "Workers"
}, {
"url" : "/summary",
"state": "worker.card.summary",
@ -40,7 +39,8 @@
"description": "Basic data",
"params": {
"worker": "$ctrl.worker"
}
},
"acl": ["developer"]
}
]
}

View File

@ -6,9 +6,6 @@
<vn-label-value label="Id"
value="{{worker.id}}">
</vn-label-value>
<vn-label-value label="Fiscal identifier"
value="{{worker.client.fi}}">
</vn-label-value>
<vn-label-value label="Email"
value="{{worker.user.email}}">
</vn-label-value>

View File

@ -107,7 +107,7 @@ module.exports = {
format: 'A4',
border: '1.5cm',
footer: {
height: '60px',
height: '55px',
}
};

View File

@ -1,5 +1,5 @@
module.exports = {
messages: {
es: {clientName: 'Nombre cliente'},
es: {},
},
};

View File

@ -15,7 +15,7 @@
</div>
<!-- Title block end -->
<h1>{{ $t('sections.introduction.title') }},</h1>
<p>{{ $t('sections.introduction.title') }},</p>
<p>{{ $t('sections.introduction.description') }}</p>
<p>{{ $t('sections.introduction.terms') }}</p>

View File

@ -15,7 +15,7 @@
</div>
<!-- Title block end -->
<h1>{{ $t('sections.introduction.title') }},</h1>
<p>{{ $t('sections.introduction.title') }},</p>
<p>{{ $t('sections.introduction.description') }}</p>
<p>{{ $t('checkExtract') }}</p>

View File

@ -15,7 +15,7 @@
</div>
<!-- Title block end -->
<h1>{{ $t('sections.introduction.title') }},</h1>
<p>{{ $t('sections.introduction.title') }},</p>
<p v-html="`${$t('sections.introduction.description')}:`"></p>
<p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -24,7 +24,10 @@ module.exports = {
},
data() {
return {
files: ['/assets/files/model.ezp'],
files: [
'/assets/files/model.ezp',
'/assets/files/port.png'
],
};
},
methods: {

View File

@ -30,6 +30,9 @@ module.exports = {
'Elige la primera opcion "Setup printer"',
'Haz clic en la primera pestalla "Label Setup"',
'Modifica la propidad "Paper Height"',
`Comprueba el puerto de la impresora, botón de le la derecha
"SETUP PRINTER" y en la parte derecha, igual como la imagen
que adjuntamos, seleccionar la que ponga "USB00x: GODEX"`,
'Haz clic en el boton "Ok"',
'Haz clic sobre el icono de la impresora',
'Haz clic en "Print"',

View File

@ -5,7 +5,7 @@
<!-- Header component -->
<report-header :locale="ticket.locale"></report-header>
<!-- End header component -->
<section class="main" style="margin-bottom:100px">
<section class="main">
<section class="columns">
<section class="size50">
<section class="size75">
@ -185,7 +185,6 @@
</section>
</section>
</section>
</section>
<!-- Footer component -->
<report-footer id="pageFooter"