Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 5640-mayusFiscalDate
gitea/salix/pipeline/head Build queued...
Details
gitea/salix/pipeline/head Build queued...
Details
This commit is contained in:
commit
4fb0ad415c
31
CHANGELOG.md
31
CHANGELOG.md
|
@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [2330.01] - 2023-07-27
|
## [2334.01] - 2023-08-24
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
@ -14,6 +14,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|
||||||
|
## [2332.01] - 2023-08-09
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- (Trabajadores -> Gestión documental) Soporte para Docuware
|
||||||
|
- (General -> Agencia) Soporte para Viaexpress
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- (General -> Tickets) Devuelve el motivo por el cual no es editable
|
||||||
|
- (Desplegables -> Trabajadores) Mejorados
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
|
||||||
|
## [2330.01] - 2023-07-27
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- (Artículos -> Vista Previa) Añadido campo "Plástico reciclado"
|
||||||
|
- (Rutas -> Troncales) Nueva sección
|
||||||
|
- (Tickets -> Opciones) Opción establecer peso
|
||||||
|
- (Clientes -> SMS) Nueva sección
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- (General -> Iconos) Añadidos nuevos iconos
|
||||||
|
- (Clientes -> Razón social) Permite crear clientes con la misma razón social según el país
|
||||||
|
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
|
||||||
## [2328.01] - 2023-07-13
|
## [2328.01] - 2023-07-13
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -47,7 +47,7 @@ module.exports = Self => {
|
||||||
const user = await Self.findById(userId, {fields: ['hasGrant']}, myOptions);
|
const user = await Self.findById(userId, {fields: ['hasGrant']}, myOptions);
|
||||||
|
|
||||||
const userToUpdate = await Self.findById(id, {
|
const userToUpdate = await Self.findById(id, {
|
||||||
fields: ['id', 'name', 'hasGrant', 'roleFk', 'password'],
|
fields: ['id', 'name', 'hasGrant', 'roleFk', 'password', 'email'],
|
||||||
include: {
|
include: {
|
||||||
relation: 'role',
|
relation: 'role',
|
||||||
scope: {
|
scope: {
|
||||||
|
|
|
@ -20,7 +20,7 @@ module.exports = function(Self) {
|
||||||
Self.validatesFormatOf('email', {
|
Self.validatesFormatOf('email', {
|
||||||
message: 'Invalid email',
|
message: 'Invalid email',
|
||||||
allowNull: true,
|
allowNull: true,
|
||||||
allowBlank: true,
|
allowBlank: false,
|
||||||
with: /^[\w|.|-]+@[\w|-]+(\.[\w|-]+)*(,[\w|.|-]+@[\w|-]+(\.[\w|-]+)*)*$/
|
with: /^[\w|.|-]+@[\w|-]+(\.[\w|-]+)*(,[\w|.|-]+@[\w|-]+(\.[\w|-]+)*)*$/
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -115,6 +115,14 @@ module.exports = function(Self) {
|
||||||
Self.validateLogin = async function(user, password) {
|
Self.validateLogin = async function(user, password) {
|
||||||
let loginInfo = Object.assign({password}, Self.userUses(user));
|
let loginInfo = Object.assign({password}, Self.userUses(user));
|
||||||
token = await Self.login(loginInfo, 'user');
|
token = await Self.login(loginInfo, 'user');
|
||||||
|
|
||||||
|
const userToken = await token.user.get();
|
||||||
|
try {
|
||||||
|
await Self.app.models.Account.sync(userToken.name, password);
|
||||||
|
} catch (err) {
|
||||||
|
console.warn(err);
|
||||||
|
}
|
||||||
|
|
||||||
return {token: token.id, ttl: token.ttl};
|
return {token: token.id, ttl: token.ttl};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -339,8 +339,9 @@ export default class SmartTable extends Component {
|
||||||
if (!header) return;
|
if (!header) return;
|
||||||
|
|
||||||
const tbody = this.element.querySelector('tbody');
|
const tbody = this.element.querySelector('tbody');
|
||||||
const columns = header.querySelectorAll('th');
|
if (!tbody) return;
|
||||||
|
|
||||||
|
const columns = header.querySelectorAll('th');
|
||||||
const hasSearchRow = tbody.querySelector('tr#searchRow');
|
const hasSearchRow = tbody.querySelector('tr#searchRow');
|
||||||
if (hasSearchRow) {
|
if (hasSearchRow) {
|
||||||
if (this.$inputsScope)
|
if (this.$inputsScope)
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
label="Recovery email"
|
label="Recovery email"
|
||||||
ng-model="$ctrl.account.email"
|
ng-model="$ctrl.account.email"
|
||||||
info="This email is used for user to regain access their account."
|
info="This email is used for user to regain access their account."
|
||||||
rule="VnUser.name">
|
rule="VnUser.email">
|
||||||
</vn-textfield>
|
</vn-textfield>
|
||||||
</vn-horizontal>
|
</vn-horizontal>
|
||||||
</vn-card>
|
</vn-card>
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
name: invoice in
|
||||||
|
columns:
|
||||||
|
id: id
|
||||||
|
serialNumber: serial number
|
||||||
|
serial: serial
|
||||||
|
supplierFk: supplier
|
||||||
|
issued: issued
|
||||||
|
supplierRef: supplierRef
|
||||||
|
isBooked: is booked
|
||||||
|
currencyFk: currency
|
||||||
|
created: created
|
||||||
|
companyFk: company
|
||||||
|
docFk: document
|
||||||
|
booked: booked
|
||||||
|
operated: operated
|
||||||
|
bookEntried: book entried
|
||||||
|
isVatDeductible: is VAT deductible
|
||||||
|
withholdingSageFk: withholding
|
||||||
|
expenceFkDeductible: expence deductible
|
||||||
|
editorFk: editor
|
|
@ -0,0 +1,20 @@
|
||||||
|
name: factura recibida
|
||||||
|
columns:
|
||||||
|
id: id
|
||||||
|
serialNumber: número de serie
|
||||||
|
serial: serie
|
||||||
|
supplierFk: proveedor
|
||||||
|
issued: fecha emisión
|
||||||
|
supplierRef: referéncia proveedor
|
||||||
|
isBooked: facturado
|
||||||
|
currencyFk: moneda
|
||||||
|
created: creado
|
||||||
|
companyFk: empresa
|
||||||
|
docFk: documento
|
||||||
|
booked: fecha contabilización
|
||||||
|
operated: fecha entrega
|
||||||
|
bookEntried: fecha asiento
|
||||||
|
isVatDeductible: impuesto deducible
|
||||||
|
withholdingSageFk: código de retención
|
||||||
|
expenceFkDeductible: gasto deducible
|
||||||
|
editorFk: editor
|
|
@ -0,0 +1,9 @@
|
||||||
|
name: invoice in due day
|
||||||
|
columns:
|
||||||
|
id: id
|
||||||
|
invoiceInFk: invoice in
|
||||||
|
dueDated: due date
|
||||||
|
bankFk: bank
|
||||||
|
amount: amount
|
||||||
|
foreignValue : foreign amount
|
||||||
|
created: created
|
|
@ -0,0 +1,9 @@
|
||||||
|
name: vencimientos factura recibida
|
||||||
|
columns:
|
||||||
|
id: id
|
||||||
|
invoiceInFk: factura
|
||||||
|
dueDated: fecha vto.
|
||||||
|
bankFk: banco
|
||||||
|
amount: importe
|
||||||
|
foreignValue : importe divisa
|
||||||
|
created: creado
|
|
@ -0,0 +1,12 @@
|
||||||
|
name: invoice in tax
|
||||||
|
columns:
|
||||||
|
id: id
|
||||||
|
invoiceInFk: invoice in
|
||||||
|
taxCodeFk: tax
|
||||||
|
taxableBase: taxable base
|
||||||
|
expenceFk: expence
|
||||||
|
foreignValue: foreign amount
|
||||||
|
taxTypeSageFk: tax type
|
||||||
|
transactionTypeSageFk: transaction type
|
||||||
|
created: created
|
||||||
|
editorFk: editor
|
|
@ -0,0 +1,12 @@
|
||||||
|
name: factura recibida impuesto
|
||||||
|
columns:
|
||||||
|
id: id
|
||||||
|
invoiceInFk: factura recibida
|
||||||
|
taxCodeFk: código IVA
|
||||||
|
taxableBase: base imponible
|
||||||
|
expenceFk: código gasto
|
||||||
|
foreignValue: importe divisa
|
||||||
|
taxTypeSageFk: código impuesto
|
||||||
|
transactionTypeSageFk: código transacción
|
||||||
|
created: creado
|
||||||
|
editorFk: editor
|
|
@ -67,7 +67,7 @@ module.exports = function(Self) {
|
||||||
throw new UserError(`This ticket is already invoiced`);
|
throw new UserError(`This ticket is already invoiced`);
|
||||||
|
|
||||||
const priceZero = ticket.totalWithVat == 0;
|
const priceZero = ticket.totalWithVat == 0;
|
||||||
if (priceZero)
|
if (ticketsIds.length == 1 && priceZero)
|
||||||
throw new UserError(`A ticket with an amount of zero can't be invoiced`);
|
throw new UserError(`A ticket with an amount of zero can't be invoiced`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -36,9 +36,9 @@ module.exports = Self => {
|
||||||
if (isSubordinate === false)
|
if (isSubordinate === false)
|
||||||
throw new UserError(`You don't have enough privileges`);
|
throw new UserError(`You don't have enough privileges`);
|
||||||
|
|
||||||
const subordinate = await Worker.findById(ctx.args.workerFk);
|
const subordinate = await Worker.findById(ctx.args.workerFk, {fields: ['id']});
|
||||||
filter = mergeFilters(filter, {where: {
|
filter = mergeFilters(filter, {where: {
|
||||||
userFk: subordinate.userFk
|
userFk: subordinate.id
|
||||||
}});
|
}});
|
||||||
|
|
||||||
return Self.find(filter);
|
return Self.find(filter);
|
||||||
|
|
|
@ -25,8 +25,7 @@
|
||||||
"type" : "string"
|
"type" : "string"
|
||||||
},
|
},
|
||||||
"userFk": {
|
"userFk": {
|
||||||
"type" : "number",
|
"type" : "number"
|
||||||
"required": true
|
|
||||||
},
|
},
|
||||||
"bossFk": {
|
"bossFk": {
|
||||||
"type" : "number"
|
"type" : "number"
|
||||||
|
|
|
@ -32,6 +32,28 @@ class Controller extends Descriptor {
|
||||||
this.vnApp.showSuccess(this.$t('Department deleted.'));
|
this.vnApp.showSuccess(this.$t('Department deleted.'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadData() {
|
||||||
|
const filter = {
|
||||||
|
fields: ['id', 'name', 'code', 'workerFk', 'isProduction', 'chatName',
|
||||||
|
'isTeleworking', 'notificationEmail', 'hasToRefill', 'hasToSendMail', 'hasToMistake', 'clientFk'],
|
||||||
|
include: [
|
||||||
|
{relation: 'client',
|
||||||
|
scope: {
|
||||||
|
fields: ['id', 'name']
|
||||||
|
}},
|
||||||
|
{
|
||||||
|
relation: 'worker',
|
||||||
|
scope: {
|
||||||
|
fields: ['id', 'firstName', 'lastName']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
return this.getData(`Departments/${this.id}`, {filter})
|
||||||
|
.then(res => this.entity = res.data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Controller.$inject = ['$element', '$scope', '$rootScope'];
|
Controller.$inject = ['$element', '$scope', '$rootScope'];
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
filter="::$ctrl.filter"
|
filter="::$ctrl.filter"
|
||||||
data="$ctrl.hours">
|
data="$ctrl.hours">
|
||||||
</vn-crud-model>
|
</vn-crud-model>
|
||||||
<div ng-if="$ctrl.card.hasWorkCenter">
|
<div>
|
||||||
<vn-card class="vn-pa-lg vn-w-lg">
|
<vn-card class="vn-pa-lg vn-w-lg">
|
||||||
<vn-table model="model" auto-load="false">
|
<vn-table model="model" auto-load="false">
|
||||||
<vn-thead>
|
<vn-thead>
|
||||||
|
@ -106,12 +106,6 @@
|
||||||
</vn-button>
|
</vn-button>
|
||||||
</vn-button-bar>
|
</vn-button-bar>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
ng-if="!$ctrl.card.hasWorkCenter"
|
|
||||||
class="bg-title"
|
|
||||||
translate>
|
|
||||||
Autonomous worker
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<vn-side-menu side="right">
|
<vn-side-menu side="right">
|
||||||
<div class="vn-pa-md">
|
<div class="vn-pa-md">
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "salix-back",
|
"name": "salix-back",
|
||||||
"version": "23.30.01",
|
"version": "23.34.01",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "salix-back",
|
"name": "salix-back",
|
||||||
"version": "23.30.01",
|
"version": "23.34.01",
|
||||||
"author": "Verdnatura Levante SL",
|
"author": "Verdnatura Levante SL",
|
||||||
"description": "Salix backend",
|
"description": "Salix backend",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
|
|
|
@ -539,9 +539,9 @@
|
||||||
<Stroke>2</Stroke>
|
<Stroke>2</Stroke>
|
||||||
<Width>4</Width>
|
<Width>4</Width>
|
||||||
</GraphicShape>
|
</GraphicShape>
|
||||||
<GraphicShape xsi:type="WindowText" Style="Cross" IsPrint="true" PageAlignment="None" Locked="false" bStroke="true" bFill="true" Direction="Angle90" X="613" Y="24" Alignment="Left" AlignPointX="613" AlignPointY="24" FontScript="Default" FontCmd="Arial,118.2266,B
" FontHeight="1" FontWidth="1" TextSpace="0" bSpaceCropping="false">
|
<GraphicShape xsi:type="WindowText" Style="Cross" IsPrint="true" PageAlignment="None" Locked="false" bStroke="true" bFill="true" Direction="Angle90" X="564" Y="32" Alignment="Left" AlignPointX="564" AlignPointY="32" FontScript="Default" FontCmd="Arial,118.2266,B
" FontHeight="1" FontWidth="1" TextSpace="0" bSpaceCropping="false">
|
||||||
<qHitOnCircumferance>false</qHitOnCircumferance>
|
<qHitOnCircumferance>false</qHitOnCircumferance>
|
||||||
<Selected>false</Selected>
|
<Selected>true</Selected>
|
||||||
<iBackground_color>4294967295</iBackground_color>
|
<iBackground_color>4294967295</iBackground_color>
|
||||||
<Id>5</Id>
|
<Id>5</Id>
|
||||||
<ItemLabel>W5</ItemLabel>
|
<ItemLabel>W5</ItemLabel>
|
||||||
|
@ -571,15 +571,15 @@
|
||||||
<BoundRectHeight>2896</BoundRectHeight>
|
<BoundRectHeight>2896</BoundRectHeight>
|
||||||
<BoundRect>
|
<BoundRect>
|
||||||
<Location>
|
<Location>
|
||||||
<X>187</X>
|
<X>138</X>
|
||||||
<Y>24</Y>
|
<Y>32</Y>
|
||||||
</Location>
|
</Location>
|
||||||
<Size>
|
<Size>
|
||||||
<Width>426</Width>
|
<Width>426</Width>
|
||||||
<Height>2896</Height>
|
<Height>2896</Height>
|
||||||
</Size>
|
</Size>
|
||||||
<X>187</X>
|
<X>138</X>
|
||||||
<Y>24</Y>
|
<Y>32</Y>
|
||||||
<Width>426</Width>
|
<Width>426</Width>
|
||||||
<Height>2896</Height>
|
<Height>2896</Height>
|
||||||
</BoundRect>
|
</BoundRect>
|
||||||
|
@ -621,14 +621,14 @@
|
||||||
<Setup bInfinityPrint="false" LabelLength="610" LabelWidth="100" LeftMargin="0" TopMargin="0" LabelType="1" GapLength="3" FeedLength="0" ZSign="43" BlackMark="3" Position="0" Speed="2" Copy="1" bCopyDataBase="false" CopyField="None" Stripper="0" LabelsPerCut="0" DoubleCut_Enable="false" DoubleCut_OffsetLen="0" DoubleCut_FirstCutMode="1" Rotate180="200" Stop="35" Darkness="5" Number="1" bCutDataBase="false" bBatchCut="false" bNumberDataBase="false" NumberField="None" PageDirection="Portrait" PrintMode="0" PowerRFID="10" LengthRFID="0" RetryRFID="3" DrawMode="0">
|
<Setup bInfinityPrint="false" LabelLength="610" LabelWidth="100" LeftMargin="0" TopMargin="0" LabelType="1" GapLength="3" FeedLength="0" ZSign="43" BlackMark="3" Position="0" Speed="2" Copy="1" bCopyDataBase="false" CopyField="None" Stripper="0" LabelsPerCut="0" DoubleCut_Enable="false" DoubleCut_OffsetLen="0" DoubleCut_FirstCutMode="1" Rotate180="200" Stop="35" Darkness="5" Number="1" bCutDataBase="false" bBatchCut="false" bNumberDataBase="false" NumberField="None" PageDirection="Portrait" PrintMode="0" PowerRFID="10" LengthRFID="0" RetryRFID="3" DrawMode="0">
|
||||||
<Layout Shape="0" AcrossType="Copied" PageDirection="Portrait" HorAcross="1" VerAcross="1" HorGap="0" VerGap="0" HorAcrossMode1="1" VerAcrossMode1="1" LabelMode="0" HorGapMode1="0" VerGapMode1="0" BottomMargin="0" RightMargin="0" />
|
<Layout Shape="0" AcrossType="Copied" PageDirection="Portrait" HorAcross="1" VerAcross="1" HorGap="0" VerGap="0" HorAcrossMode1="1" VerAcrossMode1="1" LabelMode="0" HorGapMode1="0" VerGapMode1="0" BottomMargin="0" RightMargin="0" />
|
||||||
<Description>New label
|
<Description>New label
|
||||||
Lang:(es-ES) OS:Microsoft Windows NT 10.0.22000.0(Win32NT)</Description>
|
Lang:(es-ES) OS:Microsoft Windows NT 10.0.19045.0(Win32NT)</Description>
|
||||||
<UnitType>Mm</UnitType>
|
<UnitType>Mm</UnitType>
|
||||||
<Dpi>203</Dpi>
|
<Dpi>203</Dpi>
|
||||||
</Setup>
|
</Setup>
|
||||||
<PrinterModel />
|
<PrinterModel />
|
||||||
<PrinterLanguage>EZPL</PrinterLanguage>
|
<PrinterLanguage>EZPL</PrinterLanguage>
|
||||||
<USBName>GODEX G300#132207AB</USBName>
|
<USBName>00000000</USBName>
|
||||||
<COMName>None</COMName>
|
<COMName>COM1</COMName>
|
||||||
<CommunicationType>USB</CommunicationType>
|
<CommunicationType>USB</CommunicationType>
|
||||||
<NetworkIPAddress>2886794855</NetworkIPAddress>
|
<NetworkIPAddress>2886794855</NetworkIPAddress>
|
||||||
<NetworkPort>9100</NetworkPort>
|
<NetworkPort>9100</NetworkPort>
|
|
@ -1,9 +1,9 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"filename": "model.ezp",
|
"filename": "model.ezpx",
|
||||||
"component": "printer-setup",
|
"component": "printer-setup",
|
||||||
"path": "/assets/files/model.ezp",
|
"path": "/assets/files/model.ezpx",
|
||||||
"cid": "model.ezp"
|
"cid": "model.ezpx"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "port.png",
|
"filename": "port.png",
|
||||||
|
@ -11,4 +11,4 @@
|
||||||
"path": "/assets/files/port.png",
|
"path": "/assets/files/port.png",
|
||||||
"cid": "port.png"
|
"cid": "port.png"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue