Tarea #333 Ultimas Entradas

This commit is contained in:
gerard 2018-06-20 11:39:29 +02:00
parent eebb19cceb
commit 42eacd4905
8 changed files with 205 additions and 0 deletions

View File

@ -121,6 +121,18 @@
"icon": "icon-transaction" "icon": "icon-transaction"
}, },
"acl": ["employee"] "acl": ["employee"]
}, {
"url" : "/last-entries",
"state": "item.card.last-entries",
"component": "vn-item-last-entries",
"params": {
"item": "$ctrl.item"
},
"menu": {
"description": "Last entries",
"icon": "icon-transaction"
},
"acl": ["employee"]
} }
] ]
} }

View File

@ -11,6 +11,7 @@ import './data';
import './tags'; import './tags';
import './tax'; import './tax';
import './history'; import './history';
import './last-entries';
import './niche'; import './niche';
import './botanical'; import './botanical';
import './barcode'; import './barcode';

View File

@ -0,0 +1,68 @@
<vn-vertical>
<vn-card pad-large>
<vn-vertical>
<vn-title>Last entries</vn-title>
<vn-horizontal>
<vn-date-picker
vn-one
label="Since"
model="$ctrl.entriesDate"
ini-options="{dateFormat: 'd-m-Y'}">
</vn-date-picker>
<!--datepicker-->
</vn-horizontal>
<table class="vn-grid">
<thead>
<tr>
<th number vn-tooltip="Ignored">Ig</th>
<th number translate>Warehouse</th>
<th number translate>Landed</th>
<th number translate>Entry</th>
<th number vn-tooltip="Price Per Unit">P.P.U</th>
<th number vn-tooltip="Price Per Package">P.P.P</th>
<th number class="expendable" translate>Label</th>
<th number>Packing</th>
<th number>Grouping</th>
<th number class="expendable" translate>Stems</th>
<th number translate>Quantity</th>
<th number class="expendable" translate>Cost</th>
<th number translate>Cube</th>
<th number class="expendable" translate>Provider</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="entries in $ctrl.entries">
<td number>
<vn-check
field="entries.isIgnored"
disabled="true">
</vn-check>
</td>
<td number>{{entries.warehouse| dashIfEmpty}}</td>
<td number>{{entries.landed | date:'dd/MM/yyyy HH:mm'}}</td>
<td number>{{entries.entryFk | dashIfEmpty}}</td>
<td number>{{entries.price2 | dashIfEmpty}}</td>
<td number>{{entries.price3 | dashIfEmpty}}</td>
<td number class="expendable">{{entries.stickers | dashIfEmpty}}</td>
<td number>
<div ng-class="{'round': entries.groupingMode == 2}">{{entries.packing | dashIfEmpty}}</div>
</td>
<td number>
<div ng-class="{'round': entries.groupingMode == 1}">{{entries.grouping | dashIfEmpty}}</div>
</td>
<td number class="expendable">{{entries.stems | dashIfEmpty}}</td>
<td number>{{entries.quantity}}</td>
<td number class="expendable">{{entries.buyingValue | dashIfEmpty}}</td>
<td number>{{entries.packageFk | dashIfEmpty}}</td>
<td number class="expendable">{{entries.supplier | dashIfEmpty}}</td>
</tr>
<tr ng-if="$ctrl.entries.length === 0" class="list list-element">
<td colspan="14" style="text-align: center" translate>No results</td>
</tr>
</tbody>
</table>
</vn-vertical>
</vn-card>
<vn-paging margin-large-top vn-one index="$ctrl.entries" total="$ctrl.entries.count"></vn-paging>
<!-- <vn-auto-paging margin-large-top vn-one index="index" total="index.model.count" items="$ctrl.instances"></vn-auto-paging> -->
</vn-vertical>

View File

@ -0,0 +1,58 @@
import ngModule from '../module';
import './style.scss';
class Controller {
constructor($scope, $http) {
this.$ = $scope;
this.$http = $http;
this.entries = [];
}
$onInit() {
this._defaultEntriesDate();
}
set item(value) {
this._item = value;
this._getLastEntries(this.entriesDate);
}
get item() {
return this._item;
}
_defaultEntriesDate() {
let defaultDate;
defaultDate = new Date();
defaultDate.setDate(defaultDate.getDate() - 75);
this.entriesDate = defaultDate;
}
set entriesDate(value) {
this._entriesDate = value;
this._getLastEntries(value);
}
get entriesDate() {
return this._entriesDate;
}
_getLastEntries(entriesDate) {
if (!entriesDate || !this.item)
return;
let filter = {itemFk: this.item.id, date: entriesDate};
this.$http.get(`/item/api/Items/getLastEntries?filter=${JSON.stringify(filter)}`).then(res => {
this.entries = res.data;
});
}
}
Controller.$inject = ['$scope', '$http'];
ngModule.component('vnItemLastEntries', {
template: require('./index.html'),
controller: Controller,
bindings: {
item: '<'
}
});

View File

@ -0,0 +1,13 @@
Last entries: Últimas entradas
Since: Desde
Landed: Llegada
Stems: Tallos
Quantity: Cantidad
Cost: Coste
Label: Etiquetas
Entry: Entrada
Ignored: Ignorado
Provider: Proveedor
Cube: Cubo
Price Per Unit: Precio Por Unidad
Price Per Package: Precio Por Paquete

View File

@ -0,0 +1,26 @@
@import "colors";
vn-item-last-entries {
.round {
background-color: $lines;
border-radius: 25px;
float: right;
width: 25px;
color: white;
text-align: center;
font-weight: bold;
}
& vn-horizontal {
justify-content: center;
}
& vn-date-picker {
flex: none!important;
& .mdl-textfield{
width: 400px!important;
}
}
@media screen and (max-width: 1440px) {
.expendable{
display: none;
}
}
}

View File

@ -0,0 +1,26 @@
module.exports = Self => {
Self.remoteMethod('getLastEntries', {
description: 'Returns last entries',
accessType: 'READ',
accepts: [{
arg: 'filter',
type: 'object',
required: true,
description: 'itemFk, id'
}],
returns: {
type: 'Array',
root: true
},
http: {
path: `/getLastEntries`,
verb: 'GET'
}
});
Self.getLastEntries = async filter => {
let query = `CALL vn.itemLastEntries(?, ?)`;
let [lastEntries] = await Self.rawSql(query, [filter.itemFk, filter.date]);
return lastEntries;
};
};

View File

@ -4,6 +4,7 @@ module.exports = Self => {
require('../methods/item/clone')(Self); require('../methods/item/clone')(Self);
require('../methods/item/updateTaxes')(Self); require('../methods/item/updateTaxes')(Self);
require('../methods/item/getDiary')(Self); require('../methods/item/getDiary')(Self);
require('../methods/item/getLastEntries')(Self);
Self.validatesPresenceOf('name', {message: 'Cannot be blank'}); Self.validatesPresenceOf('name', {message: 'Cannot be blank'});
Self.validatesPresenceOf('originFk', {message: 'Cannot be blank'}); Self.validatesPresenceOf('originFk', {message: 'Cannot be blank'});