This commit is contained in:
Juan Ferrer 2019-02-06 11:24:31 +01:00
commit 2bf9244770
79 changed files with 590 additions and 478 deletions

View File

@ -38,7 +38,7 @@
"Vehicle": { "Vehicle": {
"dataSource": "vn" "dataSource": "vn"
}, },
"UserTableConfiguration": { "UserConfigView": {
"dataSource": "vn" "dataSource": "vn"
} }
} }

View File

@ -1,9 +1,9 @@
{ {
"name": "UserTableConfiguration", "name": "UserConfigView",
"base": "VnModel", "base": "VnModel",
"options": { "options": {
"mysql": { "mysql": {
"table": "salix.userTableConfiguration" "table": "salix.userConfigView"
} }
}, },
"properties": { "properties": {
@ -21,10 +21,10 @@
} }
}, },
"relations": { "relations": {
"worker": { "user": {
"type": "belongsTo", "type": "belongsTo",
"model": "Worker", "model": "Account",
"foreignKey": "workerFk" "foreignKey": "userFk"
} }
} }
} }

View File

@ -164,7 +164,7 @@ export default {
newPaymentButton: `${components.vnFloatButton}`, newPaymentButton: `${components.vnFloatButton}`,
newPaymentBankInut: `vn-client-risk-create vn-textfield[field="$ctrl.receipt.bankFk"] input`, newPaymentBankInut: `vn-client-risk-create vn-textfield[field="$ctrl.receipt.bankFk"] input`,
newPaymentAmountInput: `vn-client-risk-create vn-textfield[field="$ctrl.receipt.amountPaid"] input`, newPaymentAmountInput: `vn-client-risk-create vn-textfield[field="$ctrl.receipt.amountPaid"] input`,
saveButton: `${components.vnSubmit}`, saveButton: `vn-client-risk-create vn-button[label="Save"]`,
firstRiskLineBalance: 'vn-client-risk-index vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(8)' firstRiskLineBalance: 'vn-client-risk-index vn-tbody > vn-tr:nth-child(1) > vn-td:nth-child(8)'
}, },

View File

@ -47,9 +47,6 @@ export default class Dialog extends Component {
if (this.onOpen) if (this.onOpen)
this.onOpen(); this.onOpen();
let firstFocusable = this.element.querySelector('input, textarea');
if (firstFocusable) firstFocusable.focus();
} }
/** /**

View File

@ -13,3 +13,4 @@ import './effects.scss';
import './order-product.scss'; import './order-product.scss';
import './summary.scss'; import './summary.scss';
import './descriptor.scss'; import './descriptor.scss';
import './modal-form.scss';

View File

@ -0,0 +1,38 @@
@import 'colors';
@import "./padding";
vn-dialog.modal-form {
vn-horizontal.header{
@extend .pad-small;
background-color: $main-01;
h5{
color: white;
margin: 0 auto;
}
}
tpl-body {
width: 100%;
}
table {
width: 100%
}
& > div{
padding: 0!important;
}
vn-textfield {
width: 100%;
}
.buttons{
margin-top: 0!important;
}
p{
display: none;
}
button.close > vn-icon{
color: white!important;
}
vn-ticket-sale-edit-discount > div {
padding-bottom: 0!important;
}
}

View File

@ -1,12 +1,12 @@
<mg-ajax path="/client/api/receipts" options="vnPost"></mg-ajax> <vn-dialog
<vn-watcher vn-id="dialog"
vn-id="watcher" class="modal-form">
data="$ctrl.receipt" <tpl-body>
form="form" <mg-ajax path="/client/api/receipts" options="vnPost"></mg-ajax>
save="post"> <vn-horizontal class="header">
</vn-watcher> <h5><span translate>New payment</span></h5>
<form name="form" ng-submit="$ctrl.onSubmit()" compact> </vn-horizontal>
<vn-card pad-large> <div pad-medium>
<vn-horizontal> <vn-horizontal>
<vn-date-picker vn-one <vn-date-picker vn-one
label="Date" label="Date"
@ -36,9 +36,10 @@
vn-focus> vn-focus>
</vn-textfield> </vn-textfield>
</vn-horizontal> </vn-horizontal>
</vn-card> </div>
<vn-button-bar> <vn-horizontal margin-medium class="buttons-bar">
<vn-submit label="Save"></vn-submit> <vn-button vn-one label="Save" ng-click="$ctrl.save()"></vn-button>
<vn-button ng-click="$ctrl.cancel($event)" label="Cancel"></vn-button> <vn-button vn-one ng-click="$ctrl.hide()" label="Cancel"></vn-button>
</vn-button-bar> </vn-horizontal>
</form> </tpl-body>
</vn-dialog>

View File

@ -1,11 +1,13 @@
import ngModule from '../../module'; import ngModule from '../../module';
import './style.scss';
class Controller { class Controller {
constructor($scope, $state, $http, $stateParams) { constructor($scope, $state, $http, vnApp, $translate) {
this.$http = $http; this.$http = $http;
this.$ = $scope; this.$ = $scope;
this.$state = $state; this.$state = $state;
this.$stateParams = $stateParams; this.vnApp = vnApp;
this.$translate = $translate;
this.receipt = { this.receipt = {
payed: new Date(), payed: new Date(),
@ -13,21 +15,26 @@ class Controller {
companyFk: window.localStorage.defaultCompanyFk, companyFk: window.localStorage.defaultCompanyFk,
bankFk: window.localStorage.defaultBankFk bankFk: window.localStorage.defaultBankFk
}; };
if (this.$stateParams.payed)
this.receipt.payed = this.$stateParams.payed;
if (this.$stateParams.bankFk)
this.receipt.bankFk = this.$stateParams.bankFk;
if (this.$stateParams.amountPaid)
this.receipt.amountPaid = this.$stateParams.amountPaid;
if (this.$stateParams.companyFk)
this.receipt.companyFk = this.$stateParams.companyFk;
} }
$onInit() { set payed(value) {
this.receipt.payed = value;
}
set bankFk(value) {
this.receipt.bankFk = value;
}
set amountPaid(value) {
this.receipt.amountPaid = value;
}
set companyFk(value) {
this.receipt.companyFk = value;
this.getAmountPaid();
}
getAmountPaid() {
let filter = { let filter = {
where: { where: {
clientFk: this.$state.params.id, clientFk: this.$state.params.id,
@ -41,25 +48,34 @@ class Controller {
}); });
} }
cancel() { show() {
this.goToIndex(); this.$.dialog.show();
} }
goToIndex() { hide() {
this.$state.go('client.card.risk.index'); this.$.dialog.hide();
} }
onSubmit() { save() {
this.$.watcher.submit().then( let query = `/client/api/receipts`;
() => { this.$http.post(query, this.receipt).then(() => {
this.goToIndex(); this.vnApp.showSuccess(this.$translate.instant('Data saved!'));
} this.hide();
); if (this.onResponse)
this.onResponse();
});
} }
} }
Controller.$inject = ['$scope', '$state', '$http', '$stateParams']; Controller.$inject = ['$scope', '$state', '$http', 'vnApp', '$translate'];
ngModule.component('vnClientRiskCreate', { ngModule.component('vnClientRiskCreate', {
template: require('./index.html'), template: require('./index.html'),
controller: Controller controller: Controller,
bindings: {
payed: '<?',
bankFk: '<?',
amountPaid: '<?',
onResponse: '&?',
companyFk: '<?'
}
}); });

View File

@ -0,0 +1,3 @@
vn-horizontal.buttons-bar{
text-align: center;
}

View File

@ -94,13 +94,16 @@
<vn-pagination model="model"></vn-pagination> <vn-pagination model="model"></vn-pagination>
</vn-card> </vn-card>
</vn-vertical> </vn-vertical>
<a ui-sref="client.card.risk.create"
vn-tooltip="New payment" <vn-float-button
vn-bind="+"
fixed-bottom-right>
<vn-float-button
vn-acl="administrative" vn-acl="administrative"
vn-acl-action="remove" vn-acl-action="remove"
icon="add"> icon="add"
</vn-float-button> vn-tooltip="New payment"
</a> vn-bind="+"
fixed-bottom-right
ng-click="$ctrl.openCreateDialog()">
</vn-float-button>
<vn-client-risk-create vn-id="riskCreateDialog">
</vn-client-risk-create>

View File

@ -31,6 +31,9 @@ class Controller {
setOrder(value) { setOrder(value) {
this.params.params.companyFk = value; this.params.params.companyFk = value;
this.filter.where.companyFk = value; this.filter.where.companyFk = value;
}
refresh() {
this.$.model.refresh(); this.$.model.refresh();
this.$.riskModel.refresh(); this.$.riskModel.refresh();
} }
@ -55,6 +58,14 @@ class Controller {
return this._risks; return this._risks;
} }
openCreateDialog() {
this.$.riskCreateDialog.companyFk = this.companyFk;
this.$.riskCreateDialog.onResponse = () => {
this.refresh();
};
this.$.riskCreateDialog.show();
}
onDownload() { onDownload() {
alert('Not implemented yet'); alert('Not implemented yet');
} }

View File

@ -5,7 +5,32 @@ vn-client-sample-create {
} }
tpl-body { tpl-body {
min-width: 800px min-width: 800px;
.container, .container h1 {
font-family: "Roboto","Helvetica","Arial",sans-serif;
font-size: 1em !important;
h1 {
font-weight: bold;
margin: auto
}
p {
margin: 1em 0
}
footer p {
font-size: 10px !important;
line-height: 10px
}
}
.title h1 {
font-size: 2em !important;
margin: 0
}
} }
} }
} }

View File

@ -46,7 +46,7 @@
<div class="attributes"> <div class="attributes">
<h5>{{$ctrl.item.id}}</h5> <h5>{{$ctrl.item.id}}</h5>
<vn-label-value label="Name" <vn-label-value label="Name"
value="{{::$ctrl.item.name}}"> value="{{$ctrl.item.name}}">
</vn-label-value> </vn-label-value>
<vn-label-value label="Buyer" <vn-label-value label="Buyer"
value="{{$ctrl.item.itemType.worker.user.nickname}}"> value="{{$ctrl.item.itemType.worker.user.nickname}}">

View File

@ -39,7 +39,7 @@
<vn-tr ng-repeat="entry in entries"> <vn-tr ng-repeat="entry in entries">
<vn-td number> <vn-td number>
<vn-check <vn-check
field="entries.isIgnored" field="entry.isIgnored"
disabled="true"> disabled="true">
</vn-check> </vn-check>
</vn-td> </vn-td>

View File

@ -36,7 +36,7 @@
value="{{$ctrl.summary.item.origin.name}}"> value="{{$ctrl.summary.item.origin.name}}">
</vn-label-value> </vn-label-value>
<vn-label-value label="stems" <vn-label-value label="stems"
value="{{$ctrl.summary.item.origin.stems}}"> value="{{$ctrl.summary.item.stems}}">
</vn-label-value> </vn-label-value>
<vn-label-value label="Buyer" <vn-label-value label="Buyer"
value="{{$ctrl.summary.item.itemType.worker.user.nickname}}"> value="{{$ctrl.summary.item.itemType.worker.user.nickname}}">

View File

@ -67,6 +67,7 @@ class Controller {
this.$scope.model.save().then(() => { this.$scope.model.save().then(() => {
this.$scope.watcher.notifySaved(); this.$scope.watcher.notifySaved();
this.$scope.model.refresh(); this.$scope.model.refresh();
this.card.reload();
}); });
} }
} }
@ -75,5 +76,8 @@ Controller.$inject = ['$stateParams', '$scope'];
ngModule.component('vnItemTags', { ngModule.component('vnItemTags', {
template: require('./index.html'), template: require('./index.html'),
controller: Controller controller: Controller,
require: {
card: '^vnItemCard'
}
}); });

View File

@ -1,5 +1,4 @@
import ngModule from '../module'; import ngModule from '../module';
import './style.scss';
class Controller { class Controller {
constructor($state, $scope, $http, vnApp, $translate) { constructor($state, $scope, $http, vnApp, $translate) {

View File

@ -37,7 +37,7 @@ module.exports = Self => {
}, },
}); });
Self.catalogFilter = async (orderFk, orderBy, filter, tags) => { Self.catalogFilter = async(orderFk, orderBy, filter, tags) => {
let conn = Self.dataSource.connector; let conn = Self.dataSource.connector;
const stmts = []; const stmts = [];
let stmt; let stmt;

View File

@ -19,9 +19,7 @@
</vn-one> </vn-one>
</vn-horizontal> </vn-horizontal>
<vn-horizontal class="input"> <vn-horizontal class="input">
<vn-autocomplete <vn-autocomplete vn-id="type" vn-one
vn-one
vn-id="type"
data="$ctrl.itemTypes" data="$ctrl.itemTypes"
on-change="$ctrl.type = { on-change="$ctrl.type = {
id: value, id: value,

View File

@ -18,6 +18,11 @@ class Controller {
return this._order; return this._order;
} }
/**
* Sets filter values from state params
*
* @param {Object} value - Order data
*/
set order(value) { set order(value) {
if (!value.id || this._order) return; if (!value.id || this._order) return;
@ -49,20 +54,18 @@ class Controller {
this.itemTypes = []; this.itemTypes = [];
this.type = null; this.type = null;
if (!value || (this.category && this.category.id == value.id)) { if (!value || (this.category && this.category.id == value.id))
this._category = null; this._category = null;
this.updateStateParams(); else
return;
}
this._category = value; this._category = value;
this.updateStateParams(); this.updateStateParams();
const query = `/item/api/ItemCategories/${value.id}/itemTypes`; if (this.tags.length > 0)
this.$http.get(query).then(res => { this.applyFilters();
this.itemTypes = res.data;
}); if (value)
this.updateItemTypes();
} }
get type() { get type() {
@ -83,6 +86,16 @@ class Controller {
this.applyFilters(); this.applyFilters();
} }
/**
* Refreshes item type dropdown data
*/
updateItemTypes() {
const query = `/item/api/ItemCategories/${this.category.id}/itemTypes`;
this.$http.get(query).then(res => {
this.itemTypes = res.data;
});
}
onSearch(event) { onSearch(event) {
if (event.key !== 'Enter') return; if (event.key !== 'Enter') return;
this.tags.push({ this.tags.push({
@ -145,6 +158,9 @@ class Controller {
this.$panel = null; this.$panel = null;
} }
/**
* Updates url state params from filter values
*/
updateStateParams() { updateStateParams() {
const params = {}; const params = {};

View File

@ -42,4 +42,8 @@ vn-catalog-filter > div {
flex-wrap: wrap; flex-wrap: wrap;
padding: $pad-medium; padding: $pad-medium;
} }
vn-autocomplete[vn-id="type"] .list {
max-height: 20em
}
} }

View File

@ -27,6 +27,9 @@
}, },
"checked": { "checked": {
"type": "Number" "type": "Number"
},
"externalId": {
"type": "Number"
} }
}, },
"relations": { "relations": {

View File

@ -16,8 +16,10 @@
label="Address" label="Address"
show-field="nickname" show-field="nickname"
value-field="id" value-field="id"
field="$ctrl.ticket.addressFk"> field="$ctrl.ticket.addressFk"
<tpl-item>{{::nickname}} order="isActive DESC">
<tpl-item ng-class="::{notActive: isActive === false}">
<span class="inactive" translate>{{::isActive ? '' : 'INACTIVE'}}</span> {{::nickname}}
<span ng-show="city || province || street">- {{::street}} - {{::city}} - {{::province.name}} - {{::agencyMode.name}}</span> <span ng-show="city || province || street">- {{::street}} - {{::city}} - {{::province.name}} - {{::agencyMode.name}}</span>
</tpl-item> </tpl-item>
</vn-autocomplete> </vn-autocomplete>

View File

@ -1,5 +1,6 @@
import ngModule from '../../module'; import ngModule from '../../module';
import {toJsonDate} from 'core/lib/date'; import {toJsonDate} from 'core/lib/date';
import './style.scss';
class Controller { class Controller {
constructor($scope, $http, $translate, vnApp) { constructor($scope, $http, $translate, vnApp) {

View File

@ -0,0 +1,13 @@
@import 'colors';
tpl-item{
&.notActive {
background-color: $main-bg;
color: $secondary-font-color;
width: 100%;
}
& > .inactive {
text-transform: uppercase;
}
}

View File

@ -3,7 +3,7 @@
url="/ticket/api/Tickets/filter" url="/ticket/api/Tickets/filter"
limit="20" limit="20"
data="tickets" data="tickets"
order="shipped ASC" order="shipped DESC"
auto-load="false"> auto-load="false">
</vn-crud-model> </vn-crud-model>
<div class="content-block"> <div class="content-block">
@ -74,7 +74,12 @@
<vn-td>{{::ticket.agencyMode}}</vn-td> <vn-td>{{::ticket.agencyMode}}</vn-td>
<vn-td>{{::ticket.warehouse}}</vn-td> <vn-td>{{::ticket.warehouse}}</vn-td>
<vn-td number>{{::ticket.total | currency: 'EUR': 2}}</vn-td> <vn-td number>{{::ticket.total | currency: 'EUR': 2}}</vn-td>
<vn-td> <vn-td number>
<vn-icon-button
ng-click="$ctrl.goToLines(ticket.id)"
vn-tooltip="Preview"
icon="icon-lines">
</vn-icon-button>
<vn-icon-button <vn-icon-button
ng-click="$ctrl.preview($event, ticket)" ng-click="$ctrl.preview($event, ticket)"
vn-tooltip="Preview" vn-tooltip="Preview"

View File

@ -8,7 +8,9 @@ export default class Controller {
this.$state = $state; this.$state = $state;
this.selectedTicket = null; this.selectedTicket = null;
this.moreOptions = [ this.moreOptions = [
{callback: this.goToTurns, name: 'Turns', always: true}, {callback: () => {
this.goToTurns('ticket.weekly');
}, name: 'Turns', always: true},
]; ];
if (!$stateParams.q) { if (!$stateParams.q) {
@ -42,6 +44,10 @@ export default class Controller {
this.$.model.clear(); this.$.model.clear();
} }
goToLines(ticketFk) {
this.$state.go('ticket.card.lines', {id: ticketFk});
}
goToTurns() { goToTurns() {
this.$state.go('ticket.weekly'); this.$state.go('ticket.weekly');
} }

View File

@ -34,6 +34,6 @@
<vn-pagination model="model"></vn-pagination> <vn-pagination model="model"></vn-pagination>
</vn-card> </vn-card>
</vn-vertical> </vn-vertical>
<a ui-sref="ticket.card.tracking.edit" vn-bind="+" vn-visible-by="production, administrative, salesperson" fixed-bottom-right> <a ui-sref="ticket.card.tracking.edit" vn-bind="+" fixed-bottom-right>
<vn-float-button icon="add"></vn-float-button> <vn-float-button icon="add"></vn-float-button>
</a> </a>

View File

@ -1,7 +1,6 @@
.container { .container {
font-family: arial, sans-serif; font-family: "Roboto", "Helvetica", "Arial", sans-serif;
font-size: 16px; font-size: 16px
zoom: 0.55
} }
.columns { .columns {

View File

@ -0,0 +1,10 @@
body {
zoom: 0.55
}
.title {
margin-bottom: 20px;
font-weight: 100;
margin-top: 0;
font-size: 2em
}

View File

@ -11,6 +11,7 @@
{"type": "report", "name": "rpt-claim-pickup-order"}, {"type": "report", "name": "rpt-claim-pickup-order"},
{"type": "report", "name": "rpt-letter-debtor"}, {"type": "report", "name": "rpt-letter-debtor"},
{"type": "report", "name": "rpt-sepa-core"}, {"type": "report", "name": "rpt-sepa-core"},
{"type": "report", "name": "rpt-informe"},
{"type": "static", "name": "email-header"}, {"type": "static", "name": "email-header"},
{"type": "static", "name": "email-footer"}, {"type": "static", "name": "email-footer"},
{"type": "static", "name": "report-header"}, {"type": "static", "name": "report-header"},

View File

@ -2,5 +2,6 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${__dirname}/style.css`]) `${appPath}/common/css/email.css`,
`${appPath}/common/css/misc.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,40 +0,0 @@
body {
background-color: #EEE
}
.container {
max-width: 600px;
min-width: 320px;
margin: 0 auto;
color: #555
}
.main {
background-color: #FFF;
padding: 20px
}
.main a {
color: #8dba25
}
.main h1 {
color: #999
}
.main h3 {
font-size: 16px
}
.title {
background-color: #95d831;
text-transform: uppercase;
text-align: center;
padding: 35px 0
}
.title h1 {
font-size: 32px;
color: #333;
margin: 0
}

View File

@ -5,7 +5,9 @@
</head> </head>
<body> <body>
<section class="container"> <section class="container">
<!-- Header component -->
<email-header></email-header> <email-header></email-header>
<!-- End header component -->
<section class="main"> <section class="main">
<!-- Title block --> <!-- Title block -->
<div class="title"> <div class="title">
@ -26,7 +28,9 @@
<p>{{$t('sections.howToBuy.stock')}}</p> <p>{{$t('sections.howToBuy.stock')}}</p>
<p>{{$t('sections.howToBuy.delivery')}}</p> --> <p>{{$t('sections.howToBuy.delivery')}}</p> -->
</section> </section>
<!-- Footer component -->
<email-footer :locale="locale"></email-footer> <email-footer :locale="locale"></email-footer>
<!-- End footer component -->
</section> </section>
</body> </body>
</html> </html>

View File

@ -2,5 +2,6 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${__dirname}/style.css`]) `${appPath}/common/css/email.css`,
`${appPath}/common/css/misc.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,40 +0,0 @@
body {
background-color: #EEE
}
.container {
max-width: 600px;
min-width: 320px;
margin: 0 auto;
color: #555
}
.main {
background-color: #FFF;
padding: 20px
}
.main a {
color: #8dba25
}
.main h1 {
color: #999
}
.main h3 {
font-size: 16px
}
.title {
background-color: #95d831;
text-transform: uppercase;
text-align: center;
padding: 35px 0
}
.title h1 {
font-size: 32px;
color: #333;
margin: 0
}

View File

@ -5,7 +5,9 @@
</head> </head>
<body> <body>
<section class="container"> <section class="container">
<!-- Header component -->
<email-header></email-header> <email-header></email-header>
<!-- End header component -->
<section class="main"> <section class="main">
<!-- Title block --> <!-- Title block -->
<div class="title"> <div class="title">
@ -62,7 +64,9 @@
</section> </section>
</p> </p>
</section> </section>
<!-- Footer component -->
<email-footer :locale="locale"></email-footer> <email-footer :locale="locale"></email-footer>
<!-- End footer component -->
</section> </section>
</body> </body>
</html> </html>

View File

@ -2,5 +2,6 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${__dirname}/style.css`]) `${appPath}/common/css/email.css`,
`${appPath}/common/css/misc.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,42 +0,0 @@
body {
background-color: #EEE
}
.container {
font-family: arial, sans-serif;
max-width: 600px;
min-width: 320px;
font-size: 16px;
margin: 0 auto;
color: #555
}
.main {
background-color: #FFF;
padding: 20px
}
.main a {
color: #8dba25
}
.main h1 {
color: #999
}
.main h3 {
font-size: 16px
}
.title {
background-color: #95d831;
text-transform: uppercase;
text-align: center;
padding: 35px 0
}
.title h1 {
font-size: 32px;
color: #333;
margin: 0
}

View File

@ -8,7 +8,6 @@
<!-- Header component --> <!-- Header component -->
<email-header></email-header> <email-header></email-header>
<!-- End header component --> <!-- End header component -->
<section class="main"> <section class="main">
<!-- Title block --> <!-- Title block -->
<div class="title"> <div class="title">

View File

@ -2,5 +2,6 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${__dirname}/style.css`]) `${appPath}/common/css/email.css`,
`${appPath}/common/css/misc.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,42 +0,0 @@
body {
background-color: #EEE
}
.container {
font-family: arial, sans-serif;
max-width: 600px;
min-width: 320px;
font-size: 16px;
margin: 0 auto;
color: #555
}
.main {
background-color: #FFF;
padding: 20px
}
.main a {
color: #8dba25
}
.main h1 {
color: #999
}
.main h3 {
font-size: 16px
}
.title {
background-color: #95d831;
text-transform: uppercase;
text-align: center;
padding: 35px 0
}
.title h1 {
font-size: 32px;
color: #333;
margin: 0
}

View File

@ -8,7 +8,6 @@
<!-- Header component --> <!-- Header component -->
<email-header></email-header> <email-header></email-header>
<!-- End header component --> <!-- End header component -->
<section class="main"> <section class="main">
<!-- Title block --> <!-- Title block -->
<div class="title"> <div class="title">

View File

@ -2,5 +2,6 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${__dirname}/style.css`]) `${appPath}/common/css/email.css`,
`${appPath}/common/css/misc.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,39 +0,0 @@
body {
background-color: #EEE
}
.container {
max-width: 600px;
min-width: 320px;
margin: 0 auto;
color: #555
}
.main {
background-color: #FFF;
padding: 20px
}
.main a {
color: #8dba25
}
.main h1 {
color: #999
}
.main h3 {
font-size: 16px
}
.title {
background-color: #95d831;
text-transform: uppercase;
text-align: center;
padding: 35px 0
}
.title h1 {
font-size: 32px;
color: #333;
margin: 0
}

View File

@ -8,7 +8,6 @@
<!-- Header component --> <!-- Header component -->
<email-header></email-header> <email-header></email-header>
<!-- End header component --> <!-- End header component -->
<section class="main"> <section class="main">
<!-- Title block --> <!-- Title block -->
<div class="title"> <div class="title">

View File

@ -2,5 +2,6 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${__dirname}/style.css`]) `${appPath}/common/css/email.css`,
`${appPath}/common/css/misc.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,40 +0,0 @@
body {
background-color: #EEE
}
.container {
max-width: 600px;
min-width: 320px;
margin: 0 auto;
color: #555
}
.main {
background-color: #FFF;
padding: 20px
}
.main a {
color: #8dba25
}
.main h1 {
color: #999
}
.main h3 {
font-size: 16px
}
.title {
background-color: #95d831;
text-transform: uppercase;
text-align: center;
padding: 35px 0
}
.title h1 {
font-size: 32px;
color: #333;
margin: 0
}

View File

@ -8,7 +8,6 @@
<!-- Header component --> <!-- Header component -->
<email-header></email-header> <email-header></email-header>
<!-- End header component --> <!-- End header component -->
<section class="main"> <section class="main">
<!-- Title block --> <!-- Title block -->
<div class="title"> <div class="title">

View File

@ -2,6 +2,7 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${appPath}/common/css/report.css`,
`${appPath}/common/css/misc.css`, `${appPath}/common/css/misc.css`,
`${__dirname}/style.css`]) `${__dirname}/style.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,14 +1,3 @@
.container {
color: #000
}
.title {
font-weight: 100;
margin-top: 0;
margin-bottom: 20px;
font-size: 2em
}
table.column-oriented { table.column-oriented {
margin-top: 50px !important margin-top: 50px !important
} }

View File

@ -2,7 +2,9 @@
<html lang="es"> <html lang="es">
<body> <body>
<section class="container"> <section class="container">
<report-header></report-header> <!-- Header component -->
<report-header :locale="locale"></report-header>
<!-- End header component -->
<section class="main"> <section class="main">
<section class="columns"> <section class="columns">
<section class="size50"> <section class="size50">
@ -72,12 +74,13 @@
<p v-html="$t('sections.agency.description')"></p> <p v-html="$t('sections.agency.description')"></p>
</section> </section>
<!-- Footer component -->
<report-footer id="pageFooter" <report-footer id="pageFooter"
:left-text="$t('claim', [claimId])" :left-text="$t('claim', [claimId])"
:center-text="clientName" :center-text="clientName"
:locale="locale"> :locale="locale">
</report-footer> </report-footer>
<!-- End footer component -->
</section> </section>
</body> </body>
</html> </html>

View File

@ -2,6 +2,7 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${appPath}/common/css/report.css`,
`${appPath}/common/css/misc.css`, `${appPath}/common/css/misc.css`,
`${__dirname}/style.css`]) `${__dirname}/style.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,14 +1,3 @@
.container {
color: #000
}
.title {
font-weight: 100;
margin-top: 0;
margin-bottom: 20px;
font-size: 2em
}
table.column-oriented { table.column-oriented {
margin-top: 50px !important margin-top: 50px !important
} }

View File

@ -1,8 +1,10 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="es"> <html lang="es">
<body> <body>
<section class="container"> <section class="container" id="report">
<report-header></report-header> <!-- Header component -->
<report-header :locale="locale"></report-header>
<!-- End header component -->
<section class="main"> <section class="main">
<section class="columns"> <section class="columns">
<section class="size50"> <section class="size50">
@ -74,13 +76,21 @@
</tr> --> </tr> -->
</tfoot> </tfoot>
</table> </table>
</section>
<div class="panel" style="text-align:center;background-color:red">
<div class="header">Firma digital</div>
<img width="200" src="http://windows.verdnatura.es/signatures/tickets/1161229.png"/>
<section>{{dmsCreated}}</section>
</div>
</div>
</section>
<!-- Footer component -->
<report-footer id="pageFooter" <report-footer id="pageFooter"
:left-text="$t('ticket', [clientId])" :left-text="$t('ticket', [ticketId])"
:center-text="clientName" :center-text="clientName"
:locale="locale"> :locale="locale">
</report-footer> </report-footer>
<!-- End footer component -->
</section> </section>
</body> </body>
</html> </html>

View File

@ -33,11 +33,17 @@ module.exports = {
data() { data() {
return {totalBalance: 0.00}; return {totalBalance: 0.00};
}, },
computed: {
dmsPath() {
return `http://windows.verdnatura.es/signatures/tickets/1161229.png`;
}
},
methods: { methods: {
fetchClient(ticketFk) { fetchClient(ticketFk) {
return database.pool.query( return database.pool.query(
`SELECT `SELECT
c.id clientId, c.id clientId,
t.id ticketId,
u.lang locale, u.lang locale,
c.email AS recipient, c.email AS recipient,
c.socialName AS clientName, c.socialName AS clientName,
@ -46,12 +52,16 @@ module.exports = {
c.city, c.city,
c.fi, c.fi,
p.name AS province, p.name AS province,
ct.country ct.country,
dt.dmsFk,
d.created AS dmsCreated
FROM ticket t FROM ticket t
JOIN client c ON c.id = t.clientFk JOIN client c ON c.id = t.clientFk
JOIN account.user u ON u.id = c.id JOIN account.user u ON u.id = c.id
JOIN country ct ON ct.id = c.countryFk JOIN country ct ON ct.id = c.countryFk
LEFT JOIN province p ON p.id = c.provinceFk LEFT JOIN province p ON p.id = c.provinceFk
LEFT JOIN dmsTicket dt ON dt.ticketFk = t.id
LEFT JOIN dms d ON d.id = dt.dmsFk
WHERE t.id = ?`, [ticketFk]); WHERE t.id = ?`, [ticketFk]);
}, },
fetchSales(clientFk, companyFk) { fetchSales(clientFk, companyFk) {

View File

@ -0,0 +1,8 @@
const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([
`${appPath}/common/css/layout.css`,
`${appPath}/common/css/report.css`,
`${appPath}/common/css/misc.css`,
`${__dirname}/style.css`])
.mergeStyles();

View File

@ -0,0 +1,3 @@
table.column-oriented {
margin-top: 50px !important
}

View File

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="es">
<body>
<section class="container" id="report">
<!-- Header component -->
<report-header :locale="locale"></report-header>
<!-- End header component -->
<section class="main">
<!-- Report start -->
<h1 class="title">{{$t('title')}}</h1>
<p>{{$t('date')}} {{dated()}}</p>
<table class="column-oriented">
<thead>
<tr>
<th>Id</th>
<th>{{$t('concept')}}</th>
<th>{{$t('quantity')}}</th>
</tr>
</thead>
<tbody>
<tr v-for="sale in sales" :key="sale.id">
<td class="font gray">{{sale.id}}</td>
<td>{{sale.concept}}</td>
<td>{{sale.quantity}}</td>
</tr>
</tbody>
</table>
<!-- Report end -->
</section>
<!-- Footer component -->
<report-footer id="pageFooter"
:left-text="$t('client', [client.id])"
:center-text="client.name"
:locale="locale">
</report-footer>
<!-- End footer component -->
</section>
</body>
</html>

View File

@ -0,0 +1,32 @@
const strftime = require('strftime');
module.exports = {
name: 'rpt-informe',
created() {
if (this.locale)
this.$i18n.locale = this.locale;
},
data() {
return {
client: {
id: 10252,
name: 'Batman',
},
sales: [
{id: 1, concept: 'My item 1', quantity: 25},
{id: 2, concept: 'My item 2', quantity: 50},
{id: 3, concept: 'My item 3', quantity: 150}
],
locale: 'es'
};
},
methods: {
dated: () => {
return strftime('%d-%m-%Y', new Date());
},
},
components: {
'report-header': require('../report-header'),
'report-footer': require('../report-footer'),
},
};

View File

@ -0,0 +1,11 @@
module.exports = {
messages: {
es: {
title: 'Sample report',
date: 'Fecha',
quantity: 'Cantidad',
concept: 'Concepto',
client: 'Cliente {0}',
},
},
};

View File

@ -2,6 +2,7 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${appPath}/common/css/report.css`,
`${appPath}/common/css/misc.css`, `${appPath}/common/css/misc.css`,
`${__dirname}/style.css`]) `${__dirname}/style.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,14 +1,3 @@
.container {
color: #000
}
.title {
font-weight: 100;
margin-top: 0;
margin-bottom: 20px;
font-size: 2em
}
table.column-oriented { table.column-oriented {
margin-top: 50px !important margin-top: 50px !important
} }

View File

@ -2,7 +2,9 @@
<html lang="es"> <html lang="es">
<body> <body>
<section class="container"> <section class="container">
<report-header></report-header> <!-- Header component -->
<report-header :locale="locale"></report-header>
<!-- End header component -->
<section class="main"> <section class="main">
<section class="columns"> <section class="columns">
<section class="size50"> <section class="size50">
@ -71,12 +73,13 @@
</tfoot> </tfoot>
</table> </table>
</section> </section>
<!-- Footer component -->
<report-footer id="pageFooter" <report-footer id="pageFooter"
:left-text="$t('client', [clientId])" :left-text="$t('claim', [claimId])"
:center-text="clientName" :center-text="clientName"
:locale="locale"> :locale="locale">
</report-footer> </report-footer>
<!-- End footer component -->
</section> </section>
</body> </body>
</html> </html>

View File

@ -2,6 +2,7 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${appPath}/common/css/report.css`,
`${appPath}/common/css/misc.css`, `${appPath}/common/css/misc.css`,
`${__dirname}/style.css`]) `${__dirname}/style.css`])
.mergeStyles(); .mergeStyles();

View File

@ -1,14 +1,3 @@
.container {
color: #000
}
.title {
margin-bottom: 10px;
font-weight: 100;
font-size: 1.5em;
margin-top: 0
}
.payment-type { .payment-type {
width: auto width: auto
} }

View File

@ -2,7 +2,9 @@
<html lang="es"> <html lang="es">
<body> <body>
<section class="container"> <section class="container">
<report-header></report-header> <!-- Header component -->
<report-header :locale="locale"></report-header>
<!-- End header component -->
<section class="main"> <section class="main">
<h1 class="title centered">{{$t('title')}}</h1> <h1 class="title centered">{{$t('title')}}</h1>
<section class="panel supplierPanel"> <section class="panel supplierPanel">
@ -139,12 +141,13 @@
<p class="font small">{{$t('mandatoryFields')}}</p> <p class="font small">{{$t('mandatoryFields')}}</p>
<p class="font small">{{$t('sendOrder')}}</p> <p class="font small">{{$t('sendOrder')}}</p>
</section> </section>
<!-- Footer component -->
<report-footer id="pageFooter" <report-footer id="pageFooter"
:left-text="$t('order', [mandateCode])" :left-text="$t('claim', [claimId])"
:center-text="clientName" :center-text="clientName"
:locale="locale"> :locale="locale">
</report-footer> </report-footer>
<!-- End footer component -->
</section> </section>
</body> </body>
</html> </html>

View File

@ -0,0 +1,8 @@
const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([
`${appPath}/common/css/layout.css`,
`${appPath}/common/css/report.css`,
`${appPath}/common/css/misc.css`,
`${__dirname}/style.css`])
.mergeStyles();

View File

@ -0,0 +1,3 @@
table.column-oriented {
margin-top: 50px !important
}

View File

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="es">
<body>
<section class="container" id="report">
<!-- Header component -->
<report-header :locale="locale"></report-header>
<!-- End header component -->
<section class="main">
<!-- Report start -->
<h1 class="title">{{$t('title')}}</h1>
<p>{{$t('date')}} {{dated()}}</p>
<table class="column-oriented">
<thead>
<tr>
<th>Id</th>
<th>{{$t('concept')}}</th>
<th>{{$t('quantity')}}</th>
</tr>
</thead>
<tbody>
<tr v-for="sale in sales" :key="sale.id">
<td class="font gray">{{sale.id}}</td>
<td>{{sale.concept}}</td>
<td>{{sale.quantity}}</td>
</tr>
</tbody>
</table>
<!-- Report end -->
</section>
<!-- Footer component -->
<report-footer id="pageFooter"
:left-text="$t('client', [client.id])"
:center-text="client.name"
:locale="locale">
</report-footer>
<!-- End footer component -->
</section>
</body>
</html>

View File

@ -0,0 +1,32 @@
const strftime = require('strftime');
module.exports = {
name: 'sample-report',
created() {
if (this.locale)
this.$i18n.locale = this.locale;
},
data() {
return {
client: {
id: 10252,
name: 'Batman',
},
sales: [
{id: 1, concept: 'My item 1', quantity: 25},
{id: 2, concept: 'My item 2', quantity: 50},
{id: 3, concept: 'My item 3', quantity: 150}
],
locale: 'es'
};
},
methods: {
dated: () => {
return strftime('%d-%m-%Y', new Date());
},
},
components: {
'report-header': require('../report-header'),
'report-footer': require('../report-footer'),
},
};

View File

@ -0,0 +1,11 @@
module.exports = {
messages: {
es: {
title: 'Sample report',
date: 'Fecha',
quantity: 'Cantidad',
concept: 'Concepto',
client: 'Cliente {0}',
},
},
};

View File

@ -2,5 +2,6 @@ const CssReader = require(`${appPath}/lib/cssReader`);
module.exports = new CssReader([ module.exports = new CssReader([
`${appPath}/common/css/layout.css`, `${appPath}/common/css/layout.css`,
`${__dirname}/style.css`]) `${appPath}/common/css/email.css`,
`${appPath}/common/css/misc.css`])
.mergeStyles(); .mergeStyles();

View File

@ -8,7 +8,6 @@
<!-- Header component --> <!-- Header component -->
<email-header></email-header> <email-header></email-header>
<!-- End header component --> <!-- End header component -->
<section class="main"> <section class="main">
<!-- Title block --> <!-- Title block -->
<div class="title"> <div class="title">
@ -19,10 +18,9 @@
<p>{{$t('description.dear')}},</p> <p>{{$t('description.dear')}},</p>
<p>{{$t('description.instructions')}}</p> <p>{{$t('description.instructions')}}</p>
<p>{{$t('description.conclusion')}}</p> <p>{{$t('description.conclusion')}}</p>
</section> </section>
<!-- Footer component --> <!-- Footer component -->
<email-footer></email-footer> <email-footer :locale="locale"></email-footer>
<!-- End footer component --> <!-- End footer component -->
</section> </section>
</body> </body>

View File

@ -0,0 +1,9 @@
CREATE TABLE `salix`.`userConfigView` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userFk` int(10) unsigned NOT NULL,
`tableCode` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`configuration` text COLLATE utf8_unicode_ci,
PRIMARY KEY (`id`),
UNIQUE KEY `uniqueUser_TableCode` (`userFk`,`tableCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

View File

@ -1,18 +0,0 @@
CREATE TABLE `salix`.`userTableConfiguration` (
`id` INT NOT NULL AUTO_INCREMENT,
`workerFk` INT(11) NOT NULL,
`tableCode` VARCHAR(255) NOT NULL,
`configuration` TEXT NULL,
PRIMARY KEY (`id`));
ALTER TABLE `salix`.`userTableConfiguration`
ADD INDEX `fgn_worker_idx` (`workerFk` ASC);
ALTER TABLE `salix`.`userTableConfiguration`
ADD CONSTRAINT `fgn_worker`
FOREIGN KEY (`workerFk`)
REFERENCES `vn2008`.`Trabajadores` (`Id_Trabajador`)
ON DELETE CASCADE
ON UPDATE CASCADE;

View File

@ -0,0 +1,23 @@
ALTER TABLE `vn2008`.`expeditions`
ADD COLUMN `externalId` BIGINT(25) NULL DEFAULT NULL AFTER `workerFk`;
USE `vn`;
CREATE
OR REPLACE ALGORITHM = UNDEFINED
DEFINER = `root`@`%`
SQL SECURITY DEFINER
VIEW `vn`.`expedition` AS
SELECT
`e`.`expeditions_id` AS `id`,
`e`.`agency_id` AS `agencyModeFk`,
`e`.`ticket_id` AS `ticketFk`,
`e`.`EsBulto` AS `isBox`,
`e`.`odbc_date` AS `created`,
`e`.`Id_Article` AS `itemFk`,
`e`.`counter` AS `counter`,
`e`.`checked` AS `checked`,
`e`.`workerFk` AS `workerFk`,
`e`.`externalId` AS `externalId`
FROM
`vn2008`.`expeditions` `e`;

View File

@ -239,7 +239,8 @@ INSERT INTO `vn`.`address`(`id`, `nickname`, `street`, `city`, `postalCode`, `pr
(126, 'address 26', 'Many places', 'Silla', 46460, 1, 1111111111, 222222222, 1, 0, 106, 2, NULL, NULL, 0), (126, 'address 26', 'Many places', 'Silla', 46460, 1, 1111111111, 222222222, 1, 0, 106, 2, NULL, NULL, 0),
(127, 'address 27', 'Your pocket', 'Silla', 46460, 1, 1111111111, 222222222, 1, 0, 107, 2, NULL, NULL, 0), (127, 'address 27', 'Your pocket', 'Silla', 46460, 1, 1111111111, 222222222, 1, 0, 107, 2, NULL, NULL, 0),
(128, 'address 28', 'Cerebro', 'Silla', 46460, 1, 1111111111, 222222222, 1, 0, 108, 2, NULL, NULL, 0), (128, 'address 28', 'Cerebro', 'Silla', 46460, 1, 1111111111, 222222222, 1, 0, 108, 2, NULL, NULL, 0),
(129, 'address 29', 'Luke Cages Bar', 'Silla', 46460, 1, 1111111111, 222222222, 1, 0, 110, 2, NULL, NULL, 0); (129, 'address 29', 'Luke Cages Bar', 'Silla', 46460, 1, 1111111111, 222222222, 1, 0, 110, 2, NULL, NULL, 0),
(130, 'address 30', 'Non valid address', 'Silla', 46460, 1, 1111111111, 222222222, 0, 0, 101, 2, NULL, NULL, 0);
INSERT INTO `vn`.`clientCredit`(`id`, `clientFk`, `workerFk`, `amount`, `created`) INSERT INTO `vn`.`clientCredit`(`id`, `clientFk`, `workerFk`, `amount`, `created`)
VALUES VALUES