diff --git a/db/dump/.dump/data.sql b/db/dump/.dump/data.sql
index ca254055b..5f464c5e2 100644
--- a/db/dump/.dump/data.sql
+++ b/db/dump/.dump/data.sql
@@ -1723,7 +1723,6 @@ INSERT INTO `ACL` VALUES (378,'OsTicket','osTicketReportEmail','WRITE','ALLOW','
INSERT INTO `ACL` VALUES (379,'Item','buyerWasteEmail','WRITE','ALLOW','ROLE','system',NULL);
INSERT INTO `ACL` VALUES (380,'Claim','claimPickupPdf','READ','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (381,'Claim','claimPickupEmail','WRITE','ALLOW','ROLE','claimManager',NULL);
-INSERT INTO `ACL` VALUES (382,'Item','labelPdf','READ','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (383,'Sector','*','READ','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (384,'Sector','*','WRITE','ALLOW','ROLE','employee',NULL);
INSERT INTO `ACL` VALUES (385,'Route','driverRoutePdf','READ','ALLOW','ROLE','employee',NULL);
diff --git a/db/routines/vn/functions/buy_getUltimate.sql b/db/routines/vn/functions/buy_getUltimate.sql
new file mode 100644
index 000000000..8f5e9ce59
--- /dev/null
+++ b/db/routines/vn/functions/buy_getUltimate.sql
@@ -0,0 +1,31 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`buy_getUltimate`(
+ vItemFk INT,
+ vWarehouseFk INT,
+ vDated DATE
+)
+ RETURNS int(11)
+ DETERMINISTIC
+BEGIN
+/**
+ * Calcula las últimas compras realizadas hasta una fecha.
+ *
+ * @param vItemFk Id del artículo
+ * @param vWarehouseFk Id del almacén
+ * @param vDated Compras hasta fecha
+ * @return Id de compra
+ */
+ DECLARE vBuyFk INT;
+
+ CALL buy_getUltimate(vItemFk, vWarehouseFk, vDated);
+
+ SELECT buyFk INTO vBuyFk
+ FROM tmp.buyUltimate;
+
+ DROP TEMPORARY TABLE IF EXISTS
+ tmp.buyUltimate,
+ tmp.buyUltimateFromInterval;
+
+ RETURN vBuyFk;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/buy_getUltimate.sql b/db/routines/vn/procedures/buy_getUltimate.sql
index 1532222ad..77e2029fc 100644
--- a/db/routines/vn/procedures/buy_getUltimate.sql
+++ b/db/routines/vn/procedures/buy_getUltimate.sql
@@ -1,7 +1,7 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`buy_getUltimate`(
vItemFk INT,
- vWarehouseFk SMALLINT,
+ vWarehouseFk INT,
vDated DATE
)
BEGIN
diff --git a/db/versions/11315-grayCamellia/00-firstScript.sql b/db/versions/11315-grayCamellia/00-firstScript.sql
new file mode 100644
index 000000000..60eea0e01
--- /dev/null
+++ b/db/versions/11315-grayCamellia/00-firstScript.sql
@@ -0,0 +1,3 @@
+DELETE FROM salix.ACL
+ WHERE property = 'labelPdf'
+ AND model = 'Item';
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index a97da3194..9f01bd290 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -384,5 +384,6 @@
"No valid travel thermograph found": "No se encontró un termógrafo válido",
"The quantity claimed cannot be greater than the quantity of the line": "La cantidad reclamada no puede ser mayor que la cantidad de la línea",
"type cannot be blank": "Se debe rellenar el tipo",
- "There are tickets for this area, delete them first": "Hay tickets para esta sección, borralos primero"
-}
+ "There are tickets for this area, delete them first": "Hay tickets para esta sección, borralos primero",
+ "There is no company associated with that warehouse": "No hay ninguna empresa asociada a ese almacén"
+}
\ No newline at end of file
diff --git a/modules/item/back/methods/item/labelPdf.js b/modules/item/back/methods/item/labelBarcodePdf.js
similarity index 65%
rename from modules/item/back/methods/item/labelPdf.js
rename to modules/item/back/methods/item/labelBarcodePdf.js
index d7a50397e..3325e3da1 100644
--- a/modules/item/back/methods/item/labelPdf.js
+++ b/modules/item/back/methods/item/labelBarcodePdf.js
@@ -1,6 +1,6 @@
module.exports = Self => {
- Self.remoteMethodCtx('labelPdf', {
- description: 'Returns the item label pdf',
+ Self.remoteMethodCtx('labelBarcodePdf', {
+ description: 'Returns the item label pdf with barcode',
accessType: 'READ',
accepts: [
{
@@ -9,28 +9,24 @@ module.exports = Self => {
required: true,
description: 'The item id',
http: {source: 'path'}
- },
- {
- arg: 'recipientId',
- type: 'number',
- description: 'The recipient id',
- required: false
- },
- {
+ }, {
arg: 'warehouseId',
type: 'number',
- description: 'The warehouse id',
required: true
- },
- {
- arg: 'labelNumber',
+ }, {
+ arg: 'packing',
type: 'number',
required: false
- },
- {
- arg: 'totalLabels',
+ }, {
+ arg: 'copies',
type: 'number',
required: false
+ }, {
+ arg: 'userId',
+ type: 'number',
+ description: 'The user id from accessToken',
+ http: ctx => ctx.req.accessToken.userId,
+ required: true
}
],
returns: [
@@ -49,11 +45,11 @@ module.exports = Self => {
}
],
http: {
- path: '/:id/label-pdf',
+ path: '/:id/label-barcode-pdf',
verb: 'GET'
},
accessScopes: ['DEFAULT', 'read:multimedia']
});
- Self.labelPdf = (ctx, id) => Self.printReport(ctx, id, 'item-label');
+ Self.labelBarcodePdf = (ctx, id) => Self.printReport(ctx, id, 'item-label-barcode');
};
diff --git a/modules/item/back/methods/item/labelQrPdf.js b/modules/item/back/methods/item/labelQrPdf.js
new file mode 100644
index 000000000..4d0e34528
--- /dev/null
+++ b/modules/item/back/methods/item/labelQrPdf.js
@@ -0,0 +1,55 @@
+module.exports = Self => {
+ Self.remoteMethodCtx('labelQrPdf', {
+ description: 'Returns the item label pdf with qr',
+ accessType: 'READ',
+ accepts: [
+ {
+ arg: 'id',
+ type: 'number',
+ required: true,
+ description: 'The item id',
+ http: {source: 'path'}
+ }, {
+ arg: 'warehouseId',
+ type: 'number',
+ required: true
+ }, {
+ arg: 'packing',
+ type: 'number',
+ required: false
+ }, {
+ arg: 'copies',
+ type: 'number',
+ required: false
+ }, {
+ arg: 'userId',
+ type: 'number',
+ description: 'The user id from accessToken',
+ http: ctx => ctx.req.accessToken.userId,
+ required: true
+ }
+ ],
+ returns: [
+ {
+ arg: 'body',
+ type: 'file',
+ root: true
+ }, {
+ arg: 'Content-Type',
+ type: 'String',
+ http: {target: 'header'}
+ }, {
+ arg: 'Content-Disposition',
+ type: 'String',
+ http: {target: 'header'}
+ }
+ ],
+ http: {
+ path: '/:id/label-qr-pdf',
+ verb: 'GET'
+ },
+ accessScopes: ['DEFAULT', 'read:multimedia']
+ });
+
+ Self.labelQrPdf = (ctx, id) => Self.printReport(ctx, id, 'item-label-qr');
+};
diff --git a/modules/item/back/models/item.js b/modules/item/back/models/item.js
index e715ab431..d39586a90 100644
--- a/modules/item/back/models/item.js
+++ b/modules/item/back/models/item.js
@@ -15,7 +15,8 @@ module.exports = Self => {
require('../methods/item/getWasteByItem')(Self);
require('../methods/item/createIntrastat')(Self);
require('../methods/item/buyerWasteEmail')(Self);
- require('../methods/item/labelPdf')(Self);
+ require('../methods/item/labelBarcodePdf')(Self);
+ require('../methods/item/labelQrPdf')(Self);
require('../methods/item/setVisibleDiscard')(Self);
require('../methods/item/get')(Self);
diff --git a/print/templates/reports/item-label/assets/css/import.js b/print/templates/reports/item-label-barcode/assets/css/import.js
similarity index 100%
rename from print/templates/reports/item-label/assets/css/import.js
rename to print/templates/reports/item-label-barcode/assets/css/import.js
diff --git a/print/templates/reports/item-label-barcode/assets/css/style.css b/print/templates/reports/item-label-barcode/assets/css/style.css
new file mode 100644
index 000000000..884faef56
--- /dev/null
+++ b/print/templates/reports/item-label-barcode/assets/css/style.css
@@ -0,0 +1,84 @@
+html {
+ font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+ margin-top: -9px;
+ margin-left: -6px;
+}
+table {
+ width: 100%;
+ font-size: 14px;
+}
+td {
+ border: 6px solid white;
+}
+.center {
+ text-align: center;
+}
+.right {
+ text-align: right;
+}
+.cursive {
+ font-style: italic;
+}
+.bold {
+ font-weight: bold;
+}
+.black-bg {
+ background-color: black;
+ color: white;
+}
+.xs-txt {
+ font-size: 18px;
+}
+.md-txt {
+ font-size: 26px;
+}
+.xl-txt {
+ font-size: 50px;
+}
+.cell {
+ border: 2px solid black;
+ box-sizing: content-box;
+ width: 100%;
+ height: 30px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+.padding {
+ padding: 7px;
+}
+.xs-height {
+ height: 50px;
+ max-height: 50px;
+}
+.md-height {
+ height: 75px;
+ max-height: 75px;
+}
+.sm-width {
+ width: 60px;
+ max-width: 60px;
+}
+.md-width {
+ width: 125px;
+ max-width: 125px;
+}
+.lg-width {
+ width: 380px;
+ max-width: 380px;
+}
+.overflow-multiline {
+ max-height: inherit;
+ display: -webkit-box;
+ overflow: hidden;
+ word-wrap: break-word;
+ line-clamp: 2;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
+.overflow-line {
+ width: inherit;
+ max-width: inherit;
+ overflow: hidden;
+ white-space: nowrap;
+}
\ No newline at end of file
diff --git a/print/templates/reports/item-label-barcode/item-label-barcode.html b/print/templates/reports/item-label-barcode/item-label-barcode.html
new file mode 100644
index 000000000..929ce5fe2
--- /dev/null
+++ b/print/templates/reports/item-label-barcode/item-label-barcode.html
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+ {{item.item}}
+
+ |
+
+
+ {{item.size}}
+
+ |
+
+
+
+
+ {{
+ (item.longName && item.size && item.subName)
+ ? `${item.longName} ${item.size} ${item.subName}`
+ : item.comment
+ }}
+
+ |
+
+
+ {{item.producerName || item.producerFk}}
+
+ |
+
+
+ {{item.inkFk}}
+
+ |
+
+
+
+
+ {{item.itemFk}}
+
+ |
+
+
+ {{`${(packing || item.packing)} x ${item.stems || ''}`}}
+
+ |
+
+
+
+
+ |
+
+
+ {{item.entryFk}}
+
+ |
+
+
+
+
+ {{item.buyerName}}
+
+ |
+
+
+ {{item.origin}}
+
+ |
+
+
+
+
+ {{item.buyFk}}
+
+ |
+
+
+ {{date}}
+
+ |
+
+
+ {{`${item.labelNum}/${item.quantity / (packing || item.packing)}`}}
+
+ |
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/reports/item-label-barcode/item-label-barcode.js b/print/templates/reports/item-label-barcode/item-label-barcode.js
new file mode 100755
index 000000000..8a294afc1
--- /dev/null
+++ b/print/templates/reports/item-label-barcode/item-label-barcode.js
@@ -0,0 +1,58 @@
+const UserError = require('vn-loopback/util/user-error');
+const {DOMImplementation, XMLSerializer} = require('xmldom');
+const moment = require('moment');
+const jsbarcode = require('jsbarcode');
+
+module.exports = {
+ name: 'item-label-qr',
+ async serverPrefetch() {
+ this.company = await this.findOneFromDef('company', [this.warehouseId]);
+ if (!this.company)
+ throw new UserError(`There is no company associated with that warehouse`);
+
+ this.date = Date.vnNew();
+ this.lastBuy = await this.findOneFromDef('lastBuy', [
+ this.id,
+ this.warehouseId,
+ this.date
+ ]);
+ this.items = await this.rawSqlFromDef('item', [this.copies || 1, this.lastBuy.id]);
+ if (!this.items.length) throw new UserError(`Empty data source`);
+ this.date = moment(this.date).format('WW/E');
+ },
+ methods: {
+ getBarcode(data) {
+ const document = new DOMImplementation().createDocument('http://www.w3.org/1999/xhtml', 'html', null);
+ const svgNode = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+
+ jsbarcode(svgNode, data, {
+ xmlDocument: document,
+ format: 'code128',
+ displayValue: false,
+ width: 3.8,
+ height: 85,
+ margin: 0
+ });
+ return new XMLSerializer().serializeToString(svgNode);
+ }
+ },
+ props: {
+ id: {
+ type: Number,
+ required: true,
+ description: 'The item id'
+ },
+ warehouseId: {
+ type: Number
+ },
+ packing: {
+ type: Number
+ },
+ copies: {
+ type: Number
+ },
+ userId: {
+ type: Number
+ }
+ }
+};
diff --git a/print/templates/reports/item-label-barcode/locale/es.yml b/print/templates/reports/item-label-barcode/locale/es.yml
new file mode 100644
index 000000000..3cf8d2ce8
--- /dev/null
+++ b/print/templates/reports/item-label-barcode/locale/es.yml
@@ -0,0 +1 @@
+reportName: Etiqueta de artículo barcode
\ No newline at end of file
diff --git a/print/templates/reports/item-label-barcode/options.json b/print/templates/reports/item-label-barcode/options.json
new file mode 100644
index 000000000..1ae2630b0
--- /dev/null
+++ b/print/templates/reports/item-label-barcode/options.json
@@ -0,0 +1,11 @@
+{
+ "width": "10.4cm",
+ "height": "4.9cm",
+ "margin": {
+ "top": "0.17cm",
+ "right": "0.745cm",
+ "bottom": "0cm",
+ "left": "0cm"
+ },
+ "printBackground": true
+}
\ No newline at end of file
diff --git a/print/templates/reports/item-label-barcode/sql/company.sql b/print/templates/reports/item-label-barcode/sql/company.sql
new file mode 100644
index 000000000..4047786a9
--- /dev/null
+++ b/print/templates/reports/item-label-barcode/sql/company.sql
@@ -0,0 +1,5 @@
+SELECT co.code
+ FROM warehouse w
+ JOIN address a ON a.id = w.addressFk
+ JOIN company co ON co.clientFk = a.clientFk
+ WHERE w.id = ?
\ No newline at end of file
diff --git a/print/templates/reports/item-label-barcode/sql/item.sql b/print/templates/reports/item-label-barcode/sql/item.sql
new file mode 100644
index 000000000..3cb42d139
--- /dev/null
+++ b/print/templates/reports/item-label-barcode/sql/item.sql
@@ -0,0 +1,34 @@
+WITH RECURSIVE numbers AS (
+ SELECT 1 n
+ UNION ALL
+ SELECT n + 1
+ FROM numbers
+ WHERE n < ?
+)
+SELECT ROW_NUMBER() OVER() labelNum,
+ b.itemFk,
+ i.name item,
+ b.id buyFk,
+ b.quantity,
+ b.packing,
+ b.entryFk,
+ o.code origin,
+ p.`name` producerName,
+ p.id producerFk,
+ i.`size`,
+ i.category,
+ i.stems,
+ i.inkFk,
+ ig.longName,
+ ig.subName,
+ i.comment,
+ w.code buyerName
+ FROM vn.buy b
+ JOIN vn.item i ON i.id = b.itemFk
+ LEFT JOIN vn.item ig ON ig.id = b.itemOriginalFk
+ JOIN vn.origin o ON o.id = i.originFk
+ LEFT JOIN vn.producer p ON p.id = i.producerFk
+ JOIN vn.itemType it ON it.id = i.typeFk
+ JOIN vn.worker w ON w.id = it.workerFk
+ JOIN numbers num
+ WHERE b.id = ?
\ No newline at end of file
diff --git a/print/templates/reports/item-label-barcode/sql/lastBuy.sql b/print/templates/reports/item-label-barcode/sql/lastBuy.sql
new file mode 100644
index 000000000..d10339998
--- /dev/null
+++ b/print/templates/reports/item-label-barcode/sql/lastBuy.sql
@@ -0,0 +1 @@
+SELECT buy_getUltimate(?, ?, ?) id
\ No newline at end of file
diff --git a/print/templates/reports/item-label-qr/assets/css/import.js b/print/templates/reports/item-label-qr/assets/css/import.js
new file mode 100644
index 000000000..37a98dfdd
--- /dev/null
+++ b/print/templates/reports/item-label-qr/assets/css/import.js
@@ -0,0 +1,12 @@
+const Stylesheet = require(`vn-print/core/stylesheet`);
+
+const path = require('path');
+const vnPrintPath = path.resolve('print');
+
+module.exports = new Stylesheet([
+ `${vnPrintPath}/common/css/spacing.css`,
+ `${vnPrintPath}/common/css/misc.css`,
+ `${vnPrintPath}/common/css/layout.css`,
+ `${vnPrintPath}/common/css/report.css`,
+ `${__dirname}/style.css`])
+ .mergeStyles();
diff --git a/print/templates/reports/item-label-qr/assets/css/style.css b/print/templates/reports/item-label-qr/assets/css/style.css
new file mode 100644
index 000000000..fe6668c9a
--- /dev/null
+++ b/print/templates/reports/item-label-qr/assets/css/style.css
@@ -0,0 +1,89 @@
+html {
+ font-family: "Roboto", "Helvetica", "Arial", sans-serif;
+ margin-top: -7px;
+ margin-left: -6px;
+}
+.leftTable {
+ width: 47%;
+ font-size: 12px;
+ float: left;
+ text-align: center;
+}
+.leftTable img {
+ margin-top: 3px;
+ width: 110px;
+}
+.rightTable {
+ width: 53%;
+ font-size: 14px;
+ float: right;
+}
+.rightTable td {
+ border: 3px solid white;
+}
+.center {
+ text-align: center;
+}
+.cursive {
+ font-style: italic;
+}
+.bold {
+ font-weight: bold;
+}
+.black-bg {
+ background-color: black;
+ color: white;
+}
+.md-txt {
+ font-size: 20px;
+}
+.xl-txt {
+ font-size: 36px;
+}
+.cell {
+ border: 2px solid black;
+ box-sizing: content-box;
+ width: 100%;
+ height: 30px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+.padding {
+ padding: 7px;
+}
+.md-height {
+ height: 68px;
+ max-height: 68px;
+}
+.xs-width {
+ width: 60px;
+ max-width: 60px;
+}
+.sm-width {
+ width: 130px;
+ max-width: 130px;
+}
+.md-width {
+ width: 190px;
+ max-width: 190px;
+}
+.lg-width {
+ width: 240px;
+ max-width: 240px;
+}
+.overflow-multiline {
+ max-height: inherit;
+ display: -webkit-box;
+ overflow: hidden;
+ word-wrap: break-word;
+ line-clamp: 2;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
+.overflow-line {
+ width: inherit;
+ max-width: inherit;
+ overflow: hidden;
+ white-space: nowrap;
+}
\ No newline at end of file
diff --git a/print/templates/reports/item-label-qr/item-label-qr.html b/print/templates/reports/item-label-qr/item-label-qr.html
new file mode 100644
index 000000000..712bd6c7d
--- /dev/null
+++ b/print/templates/reports/item-label-qr/item-label-qr.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+ {{item.buyFk}}
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+ {{item.itemFk}}
+
+ |
+
+
+
+
+ {{item.item}}
+
+ |
+
+
+ {{item.size}}
+
+ |
+
+
+
+
+ Color: {{item.inkFk}}
+
+ |
+
+
+ {{packing || item.packing}}
+
+ |
+
+
+ {{item.stems}}
+
+ |
+
+
+
+
+ Origen: {{item.origin}}
+
+ |
+
+
+
+
+ Productor: {{item.producerName || item.producerFk}}
+
+ |
+ |
+
+
+
+
+ Comprador: {{item.buyerName}}
+
+ |
+
+
+ F: {{date}}
+
+ |
+
+
+ {{`${item.labelNum}/${item.quantity / (packing || item.packing)}`}}
+
+ |
+
+
+
+
+ Entrada: {{item.entryFk}}
+
+ |
+
+
+
+
+ {{
+ (item.longName && item.size && item.subName)
+ ? `${item.longName} ${item.size} ${item.subName}`
+ : item.comment
+ }}
+
+ |
+
+
+
+
\ No newline at end of file
diff --git a/print/templates/reports/item-label-qr/item-label-qr.js b/print/templates/reports/item-label-qr/item-label-qr.js
new file mode 100755
index 000000000..1a0ef767b
--- /dev/null
+++ b/print/templates/reports/item-label-qr/item-label-qr.js
@@ -0,0 +1,57 @@
+const UserError = require('vn-loopback/util/user-error');
+const moment = require('moment');
+const qrcode = require('qrcode');
+
+module.exports = {
+ name: 'item-label-qr',
+ async serverPrefetch() {
+ this.company = await this.findOneFromDef('company', [this.warehouseId]);
+ if (!this.company)
+ throw new UserError(`There is no company associated with that warehouse`);
+
+ this.date = Date.vnNew();
+ this.lastBuy = await this.findOneFromDef('lastBuy', [
+ this.id,
+ this.warehouseId,
+ this.date
+ ]);
+ this.items = await this.rawSqlFromDef('item', [this.copies || 1, this.lastBuy.id]);
+ if (!this.items.length) throw new UserError(`Empty data source`);
+ this.qr = await this.getQr(this.items[0].buyFk);
+ this.date = moment(this.date).format('WW/E');
+ },
+ methods: {
+ getQr(data) {
+ data = {
+ company: this.company,
+ user: this.userId,
+ created: this.date,
+ table: 'buy',
+ id: data
+ };
+ return qrcode.toDataURL(JSON.stringify(data), {
+ margin: 0,
+ errorCorrectionLevel: 'L'
+ });
+ }
+ },
+ props: {
+ id: {
+ type: Number,
+ required: true,
+ description: 'The item id'
+ },
+ warehouseId: {
+ type: Number
+ },
+ packing: {
+ type: Number
+ },
+ copies: {
+ type: Number
+ },
+ userId: {
+ type: Number
+ }
+ }
+};
diff --git a/print/templates/reports/item-label-qr/locale/es.yml b/print/templates/reports/item-label-qr/locale/es.yml
new file mode 100644
index 000000000..81dbc1877
--- /dev/null
+++ b/print/templates/reports/item-label-qr/locale/es.yml
@@ -0,0 +1 @@
+reportName: Etiqueta de artículo QR
\ No newline at end of file
diff --git a/print/templates/reports/item-label/options.json b/print/templates/reports/item-label-qr/options.json
similarity index 62%
rename from print/templates/reports/item-label/options.json
rename to print/templates/reports/item-label-qr/options.json
index 98c5788b1..c3c395040 100644
--- a/print/templates/reports/item-label/options.json
+++ b/print/templates/reports/item-label-qr/options.json
@@ -1,9 +1,9 @@
{
"width": "10.4cm",
- "height": "4.8cm",
+ "height": "4.9cm",
"margin": {
- "top": "0cm",
- "right": "0cm",
+ "top": "0.17cm",
+ "right": "0.6cm",
"bottom": "0cm",
"left": "0cm"
},
diff --git a/print/templates/reports/item-label-qr/sql/company.sql b/print/templates/reports/item-label-qr/sql/company.sql
new file mode 100644
index 000000000..4047786a9
--- /dev/null
+++ b/print/templates/reports/item-label-qr/sql/company.sql
@@ -0,0 +1,5 @@
+SELECT co.code
+ FROM warehouse w
+ JOIN address a ON a.id = w.addressFk
+ JOIN company co ON co.clientFk = a.clientFk
+ WHERE w.id = ?
\ No newline at end of file
diff --git a/print/templates/reports/item-label-qr/sql/item.sql b/print/templates/reports/item-label-qr/sql/item.sql
new file mode 100644
index 000000000..3cb42d139
--- /dev/null
+++ b/print/templates/reports/item-label-qr/sql/item.sql
@@ -0,0 +1,34 @@
+WITH RECURSIVE numbers AS (
+ SELECT 1 n
+ UNION ALL
+ SELECT n + 1
+ FROM numbers
+ WHERE n < ?
+)
+SELECT ROW_NUMBER() OVER() labelNum,
+ b.itemFk,
+ i.name item,
+ b.id buyFk,
+ b.quantity,
+ b.packing,
+ b.entryFk,
+ o.code origin,
+ p.`name` producerName,
+ p.id producerFk,
+ i.`size`,
+ i.category,
+ i.stems,
+ i.inkFk,
+ ig.longName,
+ ig.subName,
+ i.comment,
+ w.code buyerName
+ FROM vn.buy b
+ JOIN vn.item i ON i.id = b.itemFk
+ LEFT JOIN vn.item ig ON ig.id = b.itemOriginalFk
+ JOIN vn.origin o ON o.id = i.originFk
+ LEFT JOIN vn.producer p ON p.id = i.producerFk
+ JOIN vn.itemType it ON it.id = i.typeFk
+ JOIN vn.worker w ON w.id = it.workerFk
+ JOIN numbers num
+ WHERE b.id = ?
\ No newline at end of file
diff --git a/print/templates/reports/item-label-qr/sql/lastBuy.sql b/print/templates/reports/item-label-qr/sql/lastBuy.sql
new file mode 100644
index 000000000..d10339998
--- /dev/null
+++ b/print/templates/reports/item-label-qr/sql/lastBuy.sql
@@ -0,0 +1 @@
+SELECT buy_getUltimate(?, ?, ?) id
\ No newline at end of file
diff --git a/print/templates/reports/item-label/assets/css/style.css b/print/templates/reports/item-label/assets/css/style.css
deleted file mode 100644
index 1101604b9..000000000
--- a/print/templates/reports/item-label/assets/css/style.css
+++ /dev/null
@@ -1,88 +0,0 @@
-* {
- box-sizing: border-box;
-}
-.label {
- font-size: 1.2em;
-}
-
-.barcode {
- float: left;
- width: 40%;
-}
-
-.barcode h1 {
- text-align: center;
- font-size: 1.8em;
- margin: 0 0 10px 0
-}
-
-.barcode .image {
- text-align: center
-}
-
-.barcode .image img {
- width: 170px
-}
-
-.data {
- float: left;
- width: 60%;
-}
-
-.data .header {
- background-color: #000;
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
- margin-bottom: 25px;
- text-align: right;
- font-size: 1.2em;
- padding: 0.2em;
- color: #FFF
-}
-
-.data .color,
-.data .producer {
- text-transform: uppercase;
- text-align: right;
- font-size: 1.5em;
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
-}
-
-.data .producer {
- text-justify: inter-character;
-}
-
-.data .details {
- border-top: 4px solid #000;
- padding-top: 2px;
-}
-
-.data .details .package {
- padding-right: 5px;
- float: left;
- width: 50%;
-}
-
-.package .packing,
-.package .dated,
-.package .labelNumber {
- text-align: right
-}
-
-.package .packing {
- font-size: 1.8em;
- font-weight: 400
-}
-
-.data .details .size {
- background-color: #000;
- text-align: center;
- font-size: 3em;
- padding: 0.2em 0;
- float: left;
- width: 50%;
- color: #FFF
-}
\ No newline at end of file
diff --git a/print/templates/reports/item-label/item-label.html b/print/templates/reports/item-label/item-label.html
deleted file mode 100644
index 66509ab38..000000000
--- a/print/templates/reports/item-label/item-label.html
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
{{item.id}}
-
-
-
-
-
-
-
{{tags.color}}
-
{{tags.producer}}
-
-
-
{{packing()}}
-
{{formatDate(new Date(), '%W/%d')}}
-
{{labelPage}}
-
-
{{item.size}}
-
-
-
-
-
-
-
diff --git a/print/templates/reports/item-label/item-label.js b/print/templates/reports/item-label/item-label.js
deleted file mode 100755
index c5b9cdfd7..000000000
--- a/print/templates/reports/item-label/item-label.js
+++ /dev/null
@@ -1,58 +0,0 @@
-const vnReport = require('../../../core/mixins/vn-report.js');
-const qrcode = require('qrcode');
-
-module.exports = {
- name: 'item-label',
- mixins: [vnReport],
- async serverPrefetch() {
- this.item = await this.findOneFromDef('item', [this.id, this.warehouseId]);
- this.checkMainEntity(this.item);
- this.tags = await this.fetchItemTags(this.id);
- this.barcode = await this.getBarcodeBase64(this.id);
- },
-
- computed: {
- labelPage() {
- const labelNumber = this.labelNumber ? this.labelNumber : 1;
- const totalLabels = this.totalLabels ? this.totalLabels : 1;
-
- return `${labelNumber}/${totalLabels}`;
- }
- },
- methods: {
- fetchItemTags(id) {
- return this.rawSqlFromDef('itemTags', [id]).then(rows => {
- const tags = {};
- rows.forEach(row => tags[row.code] = row.value);
-
- return tags;
- });
- },
- getBarcodeBase64(id) {
- const data = String(id);
-
- return qrcode.toDataURL(data, {margin: 0});
- },
- packing() {
- const stems = this.item.stems ? this.item.stems : 1;
- return `${this.item.packing}x${stems}`;
- }
- },
- props: {
- id: {
- type: Number,
- required: true,
- description: 'The item id'
- },
- warehouseId: {
- type: Number,
- required: true
- },
- labelNumber: {
- type: Number
- },
- totalLabels: {
- type: Number
- }
- }
-};
diff --git a/print/templates/reports/item-label/locale/es.yml b/print/templates/reports/item-label/locale/es.yml
deleted file mode 100644
index 278946f3e..000000000
--- a/print/templates/reports/item-label/locale/es.yml
+++ /dev/null
@@ -1 +0,0 @@
-reportName: Etiqueta
\ No newline at end of file
diff --git a/print/templates/reports/item-label/sql/item.sql b/print/templates/reports/item-label/sql/item.sql
deleted file mode 100644
index 46aacc2fa..000000000
--- a/print/templates/reports/item-label/sql/item.sql
+++ /dev/null
@@ -1,14 +0,0 @@
-SELECT
- i.id,
- i.name,
- i.stems,
- i.size,
- b.packing,
- p.name as 'producer'
-FROM vn.item i
- JOIN cache.last_buy clb ON clb.item_id = i.id
- JOIN vn.buy b ON b.id = clb.buy_id
- JOIN vn.entry e ON e.id = b.entryFk
- JOIN vn.producer p ON p.id = i.producerFk
-
-WHERE i.id = ? AND clb.warehouse_id = ?
\ No newline at end of file
diff --git a/print/templates/reports/item-label/sql/itemTags.sql b/print/templates/reports/item-label/sql/itemTags.sql
deleted file mode 100644
index 3c20098a6..000000000
--- a/print/templates/reports/item-label/sql/itemTags.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-SELECT t.code, t.name, it.value
-FROM vn.itemTag it
- JOIN vn.tag t ON t.id = it.tagFk
-WHERE it.itemFk = ?
\ No newline at end of file