diff --git a/CHANGELOG.md b/CHANGELOG.md
index f203c6457..a2bb2e7e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,4 @@
+
# Changelog
All notable changes to this project will be documented in this file.
diff --git a/README.md b/README.md
index b420bc44f..53478f425 100644
--- a/README.md
+++ b/README.md
@@ -54,6 +54,12 @@ For end-to-end tests run from project's root.
$ npm run test:e2e
```
+## Generate changeLog test → master
+```
+$ bash changelog.sh
+```
+
+
## Visual Studio Code extensions
Open Visual Studio Code, press Ctrl+P and paste the following commands.
diff --git a/back/methods/chat/sendCheckingPresence.js b/back/methods/chat/sendCheckingPresence.js
index 85b66e94b..7ab5d63fe 100644
--- a/back/methods/chat/sendCheckingPresence.js
+++ b/back/methods/chat/sendCheckingPresence.js
@@ -1,3 +1,5 @@
+const isProduction = require('vn-loopback/server/boot/isProduction');
+
module.exports = Self => {
Self.remoteMethodCtx('sendCheckingPresence', {
description: 'Creates a message in the chat model checking the user status',
@@ -37,7 +39,7 @@ module.exports = Self => {
if (!recipient)
throw new Error(`Could not send message "${message}" to worker id ${recipientId} from user ${userId}`);
- if (process.env.NODE_ENV == 'test')
+ if (!isProduction())
message = `[Test:Environment to user ${userId}] ` + message;
const chat = await models.Chat.create({
diff --git a/back/methods/chat/sendQueued.js b/back/methods/chat/sendQueued.js
index 9a23af379..abda2ddc1 100644
--- a/back/methods/chat/sendQueued.js
+++ b/back/methods/chat/sendQueued.js
@@ -1,4 +1,6 @@
const axios = require('axios');
+const isProduction = require('vn-loopback/server/boot/isProduction');
+
module.exports = Self => {
Self.remoteMethodCtx('sendQueued', {
description: 'Send a RocketChat message',
@@ -94,7 +96,7 @@ module.exports = Self => {
* @return {Promise} - The request promise
*/
Self.sendMessage = async function sendMessage(senderFk, recipient, message) {
- if (process.env.NODE_ENV !== 'production') {
+ if (!isProduction(false)) {
return new Promise(resolve => {
return resolve({
statusCode: 200,
@@ -149,7 +151,7 @@ module.exports = Self => {
* @return {Promise} - The request promise
*/
Self.getUserStatus = async function getUserStatus(username) {
- if (process.env.NODE_ENV !== 'production') {
+ if (!isProduction(false)) {
return new Promise(resolve => {
return resolve({
data: {
diff --git a/back/methods/dms/deleteTrashFiles.js b/back/methods/dms/deleteTrashFiles.js
index 239d654ef..e07f93c90 100644
--- a/back/methods/dms/deleteTrashFiles.js
+++ b/back/methods/dms/deleteTrashFiles.js
@@ -1,6 +1,7 @@
const UserError = require('vn-loopback/util/user-error');
const fs = require('fs-extra');
const path = require('path');
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
Self.remoteMethod('deleteTrashFiles', {
@@ -22,7 +23,7 @@ module.exports = Self => {
if (typeof options == 'object')
Object.assign(myOptions, options);
- if (process.env.NODE_ENV == 'test')
+ if (!isProduction())
throw new UserError(`Action not allowed on the test environment`);
const models = Self.app.models;
diff --git a/back/methods/docuware/upload.js b/back/methods/docuware/upload.js
index 27be72295..0102911e0 100644
--- a/back/methods/docuware/upload.js
+++ b/back/methods/docuware/upload.js
@@ -1,5 +1,6 @@
const UserError = require('vn-loopback/util/user-error');
const axios = require('axios');
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
Self.remoteMethodCtx('upload', {
@@ -119,7 +120,7 @@ module.exports = Self => {
]
};
- if (process.env.NODE_ENV != 'production')
+ if (!isProduction(false))
throw new UserError('Action not allowed on the test environment');
// delete old
diff --git a/back/methods/image/scrub.js b/back/methods/image/scrub.js
index 99c6bcbf3..3c83b3be7 100644
--- a/back/methods/image/scrub.js
+++ b/back/methods/image/scrub.js
@@ -1,6 +1,7 @@
const fs = require('fs-extra');
const path = require('path');
const UserError = require('vn-loopback/util/user-error');
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
Self.remoteMethod('scrub', {
@@ -43,8 +44,7 @@ module.exports = Self => {
Self.scrub = async function(collection, remove, limit, dryRun, skipLock) {
const $ = Self.app.models;
- const env = process.env.NODE_ENV;
- dryRun = dryRun || (env && env !== 'production');
+ dryRun = dryRun || !isProduction(false);
const instance = await $.ImageCollection.findOne({
fields: ['id'],
diff --git a/back/methods/image/upload.js b/back/methods/image/upload.js
index 51da327f6..b3cdfb88b 100644
--- a/back/methods/image/upload.js
+++ b/back/methods/image/upload.js
@@ -1,6 +1,7 @@
const UserError = require('vn-loopback/util/user-error');
const fs = require('fs/promises');
const path = require('path');
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
Self.remoteMethodCtx('upload', {
@@ -41,7 +42,7 @@ module.exports = Self => {
if (!hasWriteRole)
throw new UserError(`You don't have enough privileges`);
- if (process.env.NODE_ENV == 'test')
+ if (!isProduction())
throw new UserError(`Action not allowed on the test environment`);
// Upload file to temporary path
diff --git a/back/methods/mrw-config/cancelShipment.js b/back/methods/mrw-config/cancelShipment.js
index 218b6a96b..86bbb7410 100644
--- a/back/methods/mrw-config/cancelShipment.js
+++ b/back/methods/mrw-config/cancelShipment.js
@@ -39,8 +39,6 @@ module.exports = Self => {
const xmlString = response.data;
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, 'text/xml');
- const [resultElement] = xmlDoc.getElementsByTagName('Mensaje');
-
- return resultElement.textContent;
+ return xmlDoc.getElementsByTagName('Mensaje')[0].textContent;
};
};
diff --git a/back/methods/mrw-config/createShipment.js b/back/methods/mrw-config/createShipment.js
index 12263de03..081a83382 100644
--- a/back/methods/mrw-config/createShipment.js
+++ b/back/methods/mrw-config/createShipment.js
@@ -42,7 +42,8 @@ module.exports = Self => {
throw new UserError(`Some mrwConfig parameters are not set`);
const query =
- `SELECT CASE co.code
+ `SELECT
+ CASE co.code
WHEN 'ES' THEN a.postalCode
WHEN 'PT' THEN LEFT(a.postalCode, 4)
WHEN 'AD' THEN REPLACE(a.postalCode, 'AD', '00')
@@ -89,14 +90,9 @@ module.exports = Self => {
const getLabelResponse = await sendXmlDoc('getLabel', {mrw, shipmentId}, 'text/xml');
const file = getTextByTag(getLabelResponse, 'EtiquetaFile');
- try {
- await models.Expedition.updateAll({id: expeditionFk}, {externalId: shipmentId}, myOptions);
- if (tx) await tx.commit();
- } catch (error) {
- if (tx) await tx.rollback();
- throw error;
- }
- return file;
+ if (tx) await tx.commit();
+
+ return {shipmentId, file};
};
function getTextByTag(xmlDoc, tag) {
diff --git a/back/methods/mrw-config/specs/createShipment.spec.js b/back/methods/mrw-config/specs/createShipment.spec.js
index 0f48bc2d3..f05f9a81d 100644
--- a/back/methods/mrw-config/specs/createShipment.spec.js
+++ b/back/methods/mrw-config/specs/createShipment.spec.js
@@ -81,9 +81,9 @@ describe('MRWConfig createShipment()', () => {
spyOn(axios, 'post').and.callFake(() => Promise.resolve(mockPostResponses.pop()));
- const base64Binary = await models.MrwConfig.createShipment(expedition1.id, options);
+ const {file} = await models.MrwConfig.createShipment(expedition1.id, options);
- expect(base64Binary).toEqual(mockBase64Binary);
+ expect(file).toEqual(mockBase64Binary);
});
it('should fail if mrwConfig has no data', async() => {
diff --git a/back/methods/notification/send.js b/back/methods/notification/send.js
index b2748477d..1bff7f686 100644
--- a/back/methods/notification/send.js
+++ b/back/methods/notification/send.js
@@ -1,4 +1,5 @@
const {Email} = require('vn-print');
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
Self.remoteMethod('send', {
@@ -70,7 +71,7 @@ module.exports = Self => {
const newParams = Object.assign({}, queueParams, sendParams);
const email = new Email(queueName, newParams);
- if (process.env.NODE_ENV != 'test')
+ if (isProduction())
await email.send();
await queue.updateAttribute('status', statusSent);
diff --git a/back/model-config.json b/back/model-config.json
index e64386300..b643ab54f 100644
--- a/back/model-config.json
+++ b/back/model-config.json
@@ -186,5 +186,8 @@
},
"AgencyWorkCenter": {
"dataSource": "vn"
+ },
+ "RouteConfig": {
+ "dataSource": "vn"
}
}
diff --git a/back/models/routeConfig.json b/back/models/routeConfig.json
new file mode 100644
index 000000000..f3d929749
--- /dev/null
+++ b/back/models/routeConfig.json
@@ -0,0 +1,18 @@
+{
+ "name": "RouteConfig",
+ "base": "VnModel",
+ "options": {
+ "mysql": {
+ "table": "routeConfig"
+ }
+ },
+ "properties": {
+ "id": {
+ "type": "number",
+ "description": "Identifier"
+ },
+ "kmMax": {
+ "type": "number"
+ }
+ }
+}
diff --git a/changelog.sh b/changelog.sh
new file mode 100644
index 000000000..8cd7b4716
--- /dev/null
+++ b/changelog.sh
@@ -0,0 +1,34 @@
+features_types=(chore feat style)
+changes_types=(refactor perf)
+fix_types=(fix revert)
+file="CHANGELOG.md"
+file_tmp="temp_log.txt"
+file_current_tmp="temp_current_log.txt"
+
+setType(){
+ echo "### $1" >> $file_tmp
+ arr=("$@")
+ echo "" > $file_current_tmp
+ for i in "${arr[@]}"
+ do
+ git log --grep="$i" --oneline --no-merges --format="- %s %d by:%an" master..test >> $file_current_tmp
+ done
+ # remove duplicates
+ sort -o $file_current_tmp -u $file_current_tmp
+ cat $file_current_tmp >> $file_tmp
+ echo "" >> $file_tmp
+ # remove tmp current file
+ [ -e $file_current_tmp ] && rm $file_current_tmp
+}
+
+echo "# Version XX.XX - XXXX-XX-XX" >> $file_tmp
+echo "" >> $file_tmp
+
+setType "Added 🆕" "${features_types[@]}"
+setType "Changed 📦" "${changes_types[@]}"
+setType "Fixed 🛠️" "${fix_types[@]}"
+
+cat $file >> $file_tmp
+mv $file_tmp $file
+
+
diff --git a/db/.pullinfo.json b/db/.pullinfo.json
index f4afbc5fb..0defed845 100644
--- a/db/.pullinfo.json
+++ b/db/.pullinfo.json
@@ -9,7 +9,7 @@
},
"vn": {
"view": {
- "expeditionPallet_Print": "288cbd6e8289df083ed5eb1a2c808f7a82ba4c90c8ad9781104808a7a54471fb"
+ "expeditionPallet_Print": "06613719475fcdba8309607c38cc78efc2e348cca7bc96b48dc3ae3c12426f54"
}
}
}
diff --git a/db/routines/edi/procedures/ekt_scan.sql b/db/routines/edi/procedures/ekt_scan.sql
index b0b75a6a7..0cf8bb466 100644
--- a/db/routines/edi/procedures/ekt_scan.sql
+++ b/db/routines/edi/procedures/ekt_scan.sql
@@ -23,42 +23,39 @@ BEGIN
DECLARE vXtraLongAgj INT;
DECLARE vDefaultKlo INT;
- SELECT
- ec.usefulAuctionLeftSegmentLength,
- ec.standardBarcodeLength,
- ec.floridayBarcodeLength,
- ec.floramondoBarcodeLength,
- ec.defaultKlo
- INTO
- vUsefulAuctionLeftSegmentLength,
+ SELECT usefulAuctionLeftSegmentLength,
+ standardBarcodeLength,
+ floridayBarcodeLength,
+ floramondoBarcodeLength,
+ defaultKlo
+ INTO vUsefulAuctionLeftSegmentLength,
vStandardBarcodeLength,
vFloridayBarcodeLength,
vFloramondoBarcodeLength,
vDefaultKlo
- FROM edi.ektConfig ec;
+ FROM ektConfig;
- DROP TEMPORARY TABLE IF EXISTS tmp.ekt;
- CREATE TEMPORARY TABLE tmp.ekt
+ CREATE OR REPLACE TEMPORARY TABLE tmp.ekt
ENGINE = MEMORY
SELECT id ektFk FROM ekt LIMIT 0;
- CASE
+ CASE
WHEN LENGTH(vBarcode) <= vFloridayBarcodeLength THEN
INSERT INTO tmp.ekt
SELECT id
- FROM edi.ektRecent e
+ FROM ektRecent e
WHERE e.cps = vBarcode
OR e.batchNumber = vBarcode;
WHEN LENGTH(vBarcode) = vFloramondoBarcodeLength THEN
INSERT INTO tmp.ekt
SELECT e.id
- FROM edi.ektRecent e
+ FROM ektRecent e
WHERE e.pro = MID(vBarcode,2,6)
- AND CAST(e.ptd AS SIGNED) = MID(vBarcode,8,5);
+ AND CAST(e.ptd AS SIGNED) = MID(vBarcode, 8, 5);
ELSE
- SET vBarcode = LPAD(vBarcode,vStandardBarcodeLength,'0');
+ SET vBarcode = LPAD(vBarcode, vStandardBarcodeLength, '0');
SET vAuction = MID(vBarcode, 1, 3);
SET vKlo = MID(vBarcode, 4, 2);
SET vFec = MAKEDATE(YEAR(util.VN_CURDATE()), MID(vBarcode, 6, 3));
@@ -69,21 +66,23 @@ BEGIN
-- Clásico de subasta
-- Trade standard
-- Trade que construye como la subasta
- -- Trade como el anterior pero sin trade code
+ -- Trade como el anterior pero sin trade code
INSERT INTO tmp.ekt
SELECT id
FROM ekt
WHERE fec >= vFec - INTERVAL 1 DAY
- AND ((
- vKlo = vDefaultKlo
+ AND (
+ (vKlo = vDefaultKlo
AND (klo = vKlo OR klo IS NULL OR klo = 0)
- AND agj IN (vShortAgj, vLongAgj, vXtraLongAgj))
- OR (klo = vKlo
+ AND agj IN (vShortAgj, vLongAgj, vXtraLongAgj)
+ ) OR (
+ klo = vKlo
AND auction = vAuction
- AND agj = vShortAgj)
+ AND agj = vShortAgj
+ )
)
- ORDER BY agj DESC, fec DESC
- LIMIT 1;
+ ORDER BY agj DESC, fec DESC
+ LIMIT 1;
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
@@ -91,9 +90,11 @@ BEGIN
IF NOT vIsFound THEN
INSERT INTO tmp.ekt
SELECT id
- FROM edi.ektRecent e
- WHERE e.batchNumber
- = LEFT(vBarcode,vUsefulAuctionLeftSegmentLength)
+ FROM ektRecent e
+ WHERE e.batchNumber = LEFT(
+ vBarcode,
+ vUsefulAuctionLeftSegmentLength
+ )
AND e.batchNumber > 0;
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
@@ -103,7 +104,7 @@ BEGIN
IF NOT vIsFound THEN
INSERT INTO tmp.ekt
SELECT id
- FROM edi.ektRecent e
+ FROM ektRecent e
WHERE e.putOrderFk = vBarcode;
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
@@ -113,18 +114,28 @@ BEGIN
IF NOT vIsFound THEN
INSERT INTO tmp.ekt
SELECT id
- FROM edi.ektRecent e
- WHERE e.deliveryNumber
- = MID(vBarcode, 4, 13)
+ FROM ektRecent e
+ WHERE e.deliveryNumber = MID(vBarcode, 4, 13)
AND e.deliveryNumber > 0;
SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
END IF;
+
+ -- Solo campo agj
+ IF NOT vIsFound THEN
+ INSERT INTO tmp.ekt
+ SELECT id
+ FROM ektRecent
+ WHERE agj = vShortAgj;
+
+ SELECT COUNT(*) FROM tmp.ekt INTO vIsFound;
+ END IF;
+
END CASE;
IF vIsFound THEN
UPDATE ekt e
- JOIN tmp.ekt t ON t.ektFk = e.id
+ JOIN tmp.ekt t ON t.ektFk = e.id
SET e.scanned = TRUE;
END IF;
END$$
diff --git a/db/routines/vn/events/client_userDisable.sql b/db/routines/vn/events/client_userDisable.sql
new file mode 100644
index 000000000..b3354f8fd
--- /dev/null
+++ b/db/routines/vn/events/client_userDisable.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`client_userDisable`
+ ON SCHEDULE EVERY 1 MONTH
+ STARTS '2023-06-01 00:00:00.000'
+ ON COMPLETION PRESERVE
+ ENABLE
+DO CALL client_userDisable()$$
+DELIMITER ;
diff --git a/db/routines/vn/events/clientsDisable.sql b/db/routines/vn/events/clientsDisable.sql
deleted file mode 100644
index 35e6554a2..000000000
--- a/db/routines/vn/events/clientsDisable.sql
+++ /dev/null
@@ -1,25 +0,0 @@
-DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` EVENT `vn`.`clientsDisable`
- ON SCHEDULE EVERY 1 MONTH
- STARTS '2023-06-01 00:00:00.000'
- ON COMPLETION PRESERVE
- ENABLE
-DO BEGIN
- UPDATE account.user u
- JOIN client c ON c.id = u.id
- LEFT JOIN account.account a ON a.id = u.id
- SET u.active = FALSE
- WHERE c.typeFk = 'normal'
- AND a.id IS NULL
- AND u.active
- AND c.created < util.VN_CURDATE() - INTERVAL 12 MONTH
- AND u.id NOT IN (
- SELECT DISTINCT c.id
- FROM client c
- LEFT JOIN ticket t ON t.clientFk = c.id
- WHERE c.salesPersonFk IS NOT NULL
- OR t.created > util.VN_CURDATE() - INTERVAL 12 MONTH
- OR shipped > util.VN_CURDATE() - INTERVAL 12 MONTH
- );
-END$$
-DELIMITER ;
diff --git a/db/routines/vn/procedures/buy_clone.sql b/db/routines/vn/procedures/buy_clone.sql
new file mode 100644
index 000000000..7b77204c9
--- /dev/null
+++ b/db/routines/vn/procedures/buy_clone.sql
@@ -0,0 +1,57 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`buy_clone`(vEntryFk INT)
+BEGIN
+/**
+ * Clone buys to an entry
+ *
+ * @param vEntryFk The entry id
+ * @table tmp.buy(id)
+ */
+ INSERT INTO buy(
+ entryFk,
+ itemFk,
+ quantity,
+ buyingValue,
+ freightValue,
+ isIgnored,
+ stickers,
+ packagingFk,
+ packing,
+ `grouping`,
+ groupingMode,
+ comissionValue,
+ packageValue,
+ price1,
+ price2,
+ price3,
+ minPrice,
+ isChecked,
+ location,
+ weight,
+ itemOriginalFk)
+ SELECT vEntryFk,
+ b.itemFk,
+ b.quantity,
+ b.buyingValue,
+ b.freightValue,
+ b.isIgnored,
+ b.stickers,
+ b.packagingFk,
+ b.packing,
+ b.`grouping`,
+ b.groupingMode,
+ b.comissionValue,
+ b.packageValue,
+ b.price1,
+ b.price2,
+ b.price3,
+ b.minPrice,
+ b.isChecked,
+ b.location,
+ b.weight,
+ b.itemOriginalFk
+ FROM tmp.buy tb
+ JOIN vn.buy b ON b.id = tb.id;
+
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/buy_recalcPricesByBuy.sql b/db/routines/vn/procedures/buy_recalcPricesByBuy.sql
index 4fff4d313..b699e42d7 100644
--- a/db/routines/vn/procedures/buy_recalcPricesByBuy.sql
+++ b/db/routines/vn/procedures/buy_recalcPricesByBuy.sql
@@ -10,7 +10,7 @@ BEGIN
*/
DROP TEMPORARY TABLE IF EXISTS tmp.buyRecalc;
- CREATE TEMPORARY TABLE tmp.buyRecalc
+ CREATE TEMPORARY TABLE tmp.buyRecalc
SELECT vBuyFk id;
CALL buy_recalcPrices();
diff --git a/db/routines/vn/procedures/client_userDisable.sql b/db/routines/vn/procedures/client_userDisable.sql
new file mode 100644
index 000000000..f2ba65c1c
--- /dev/null
+++ b/db/routines/vn/procedures/client_userDisable.sql
@@ -0,0 +1,33 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`client_userDisable`()
+BEGIN
+/**
+* Desactiva los clientes inactivos en los últimos X meses.
+*/
+ DECLARE vMonths INT;
+
+ SELECT monthsToDisableUser INTO vMonths
+ FROM clientConfig;
+
+ IF vMonths IS NULL THEN
+ CALL util.throw('Config parameter not set');
+ END IF;
+
+ UPDATE account.user u
+ JOIN client c ON c.id = u.id
+ LEFT JOIN account.account a ON a.id = u.id
+ SET u.active = FALSE
+ WHERE c.typeFk = 'normal'
+ AND a.id IS NULL
+ AND u.active
+ AND c.created < util.VN_CURDATE() - INTERVAL vMonths MONTH
+ AND u.id NOT IN (
+ SELECT DISTINCT c.id
+ FROM client c
+ LEFT JOIN ticket t ON t.clientFk = c.id
+ WHERE c.salesPersonFk IS NOT NULL
+ OR t.created > util.VN_CURDATE() - INTERVAL vMonths MONTH
+ OR shipped > util.VN_CURDATE() - INTERVAL vMonths MONTH
+ );
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/procedures/entry_cloneHeader.sql b/db/routines/vn/procedures/entry_cloneHeader.sql
index 6a6df9194..7f9426663 100644
--- a/db/routines/vn/procedures/entry_cloneHeader.sql
+++ b/db/routines/vn/procedures/entry_cloneHeader.sql
@@ -9,8 +9,8 @@ BEGIN
* Clones an entry header.
*
* @param vSelf The entry id
+ * @param OUT vNewEntryFk The new entry id
* @param vTravelFk Travel for the new entry or %NULL to use the source entry travel
- * @param vNewEntryFk The new entry id
*/
INSERT INTO entry(
travelFk,
diff --git a/db/routines/vn/procedures/entry_copyBuys.sql b/db/routines/vn/procedures/entry_copyBuys.sql
index a00fbc846..9bf4a55e4 100644
--- a/db/routines/vn/procedures/entry_copyBuys.sql
+++ b/db/routines/vn/procedures/entry_copyBuys.sql
@@ -1,59 +1,18 @@
DELIMITER $$
-CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`entry_copyBuys`(vSelf INT, vCopyTo INT)
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`entry_copyBuys`(vSelf INT, vDestinationEntryFk INT)
BEGIN
/**
- * Copies an entry buys to another buy.
+ * Copies all buys from an entry to an entry.
*
* @param vSelf The entry id
- * @param vCopyTo The destination entry id
+ * @param vDestinationEntryFk The destination entry id
*/
- INSERT INTO buy(
- entryFk,
- itemFk,
- quantity,
- buyingValue,
- freightValue,
- isIgnored,
- stickers,
- packing,
- `grouping`,
- groupingMode,
- containerFk,
- comissionValue,
- packageValue,
- packagingFk,
- price1,
- price2,
- price3,
- minPrice,
- isChecked,
- location,
- weight,
- itemOriginalFk
- )
- SELECT vCopyTo,
- itemFk,
- quantity,
- buyingValue,
- freightValue,
- isIgnored,
- stickers,
- packing,
- `grouping`,
- groupingMode,
- containerFk,
- comissionValue,
- packageValue,
- packagingFk,
- price1,
- price2,
- price3,
- minPrice,
- isChecked,
- location,
- weight,
- itemOriginalFk
+ CREATE OR REPLACE TEMPORARY TABLE tmp.buy
+ SELECT id
FROM buy
WHERE entryFk = vSelf;
+
+ CALL buy_clone(vDestinationEntryFk);
+ DROP TEMPORARY TABLE tmp.buy;
END$$
DELIMITER ;
diff --git a/db/routines/vn/procedures/entry_fixMisfit.sql b/db/routines/vn/procedures/entry_fixMisfit.sql
index 3e57d362e..986a0ae9e 100644
--- a/db/routines/vn/procedures/entry_fixMisfit.sql
+++ b/db/routines/vn/procedures/entry_fixMisfit.sql
@@ -26,7 +26,6 @@ BEGIN
packing,
`grouping`,
groupingMode,
- containerFk,
comissionValue,
packageValue,
location,
@@ -46,7 +45,6 @@ BEGIN
packing,
`grouping`,
groupingMode,
- containerFk,
comissionValue,
packageValue,
location,
diff --git a/db/routines/vn/procedures/entry_moveNotPrinted.sql b/db/routines/vn/procedures/entry_moveNotPrinted.sql
index 526ae9d43..3a12007d1 100644
--- a/db/routines/vn/procedures/entry_moveNotPrinted.sql
+++ b/db/routines/vn/procedures/entry_moveNotPrinted.sql
@@ -56,7 +56,6 @@ BEGIN
packing,
`grouping`,
groupingMode,
- containerFk,
comissionValue,
packageValue,
packagingFk,
@@ -77,7 +76,6 @@ BEGIN
packing,
`grouping`,
groupingMode,
- containerFk,
comissionValue,
packageValue,
packagingFk,
@@ -114,7 +112,6 @@ BEGIN
packing,
`grouping`,
groupingMode,
- containerFk,
comissionValue,
packageValue,
location,
@@ -133,7 +130,6 @@ BEGIN
packing,
`grouping`,
groupingMode,
- containerFk,
comissionValue,
packageValue,
location,
diff --git a/db/routines/vn/procedures/entry_splitByShelving.sql b/db/routines/vn/procedures/entry_splitByShelving.sql
index b7d9c77b3..2898141ea 100644
--- a/db/routines/vn/procedures/entry_splitByShelving.sql
+++ b/db/routines/vn/procedures/entry_splitByShelving.sql
@@ -76,7 +76,6 @@ BEGIN
packing,
`grouping`,
groupingMode,
- containerFk,
comissionValue,
packageValue,
location,
@@ -103,7 +102,6 @@ BEGIN
packing,
`grouping`,
groupingMode,
- containerFk,
comissionValue,
packageValue,
location,
diff --git a/db/routines/vn/procedures/itemPlacementSupplyStockGetTargetList.sql b/db/routines/vn/procedures/itemPlacementSupplyStockGetTargetList.sql
index bdc13ae9d..86d62cad4 100644
--- a/db/routines/vn/procedures/itemPlacementSupplyStockGetTargetList.sql
+++ b/db/routines/vn/procedures/itemPlacementSupplyStockGetTargetList.sql
@@ -18,11 +18,12 @@ BEGIN
JOIN vn.parking p ON p.id = sh.parkingFk
JOIN vn.sector sc ON sc.id = p.sectorFk
JOIN vn.warehouse w ON w.id = sc.warehouseFk
- WHERE sc.id = vSectorFk
- AND ish.visible > 0
+ WHERE ish.visible > 0
AND ish.itemFk = vItemFk
GROUP BY ish.id
- ORDER BY sh.priority DESC,
+ ORDER BY
+ (sc.id = vSectorFk) DESC,
+ sh.priority DESC,
ish.created,
p.pickingOrder;
END$$
diff --git a/db/routines/vn/procedures/itemShelving_getItemDetails.sql b/db/routines/vn/procedures/itemShelving_getItemDetails.sql
new file mode 100644
index 000000000..c01bc348c
--- /dev/null
+++ b/db/routines/vn/procedures/itemShelving_getItemDetails.sql
@@ -0,0 +1,55 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`itemShelving_getItemDetails`(
+ vBarcodeItem INT,
+ vShelvingFK VARCHAR(10)
+)
+BEGIN
+/**
+ * Obtiene el precio y visible de un item
+ *
+ * @param vBarcodeItem barcode de artículo
+ * @param vShelvingFK Ubicación actual del artículo
+ */
+ DECLARE vIsItem BOOL;
+ DECLARE vBuyFk INT;
+ DECLARE vWarehouseFk INT;
+
+ SELECT COUNT(*) > 0 INTO vIsItem
+ FROM item
+ WHERE id = vBarcodeItem;
+
+ IF vIsItem THEN
+ SELECT warehouseFk INTO vWarehouseFk
+ FROM operator
+ WHERE workerFk = account.myUser_getId();
+
+ CALL buyUltimate(vWarehouseFk, util.VN_CURDATE());
+
+ SELECT buyFk INTO vBuyFk
+ FROM tmp.buyUltimate
+ WHERE itemFk = vBarcodeItem
+ AND warehouseFk = vWarehouseFk;
+
+ DELETE FROM tmp.buyUltimate;
+ ELSE
+ SELECT vBarcodeItem INTO vBuyFk;
+ END IF;
+
+ WITH visible AS(
+ SELECT itemFk,
+ IFNULL(buyingValue, 0) +
+ IFNULL(freightValue, 0) +
+ IFNULL(comissionValue, 0) +
+ IFNULL(packageValue, 0) itemCost
+ FROM vn.buy b
+ WHERE b.id = vBuyFk
+ ) SELECT v.itemFk,
+ vShelvingFK,
+ v.itemCost,
+ SUM(ish.visible) visible
+ FROM vn.itemShelving ish
+ JOIN visible v
+ WHERE ish.shelvingFK = vShelvingFK COLLATE utf8mb3_general_ci
+ AND ish.itemFk = v.itemFk;
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/item_comparative.sql b/db/routines/vn/procedures/item_comparative.sql
index e72188363..d429cf009 100644
--- a/db/routines/vn/procedures/item_comparative.sql
+++ b/db/routines/vn/procedures/item_comparative.sql
@@ -6,7 +6,7 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_comparative`(
vAvailableSince DATE,
vBuyerFk INT,
vIsFloramondo BOOL,
- vCountryFk INT
+ vCountryFk INT
)
proc: BEGIN
/**
@@ -23,7 +23,6 @@ proc: BEGIN
* @param tmp.comparativeFilterType(filterFk INT ,itemTypeFk INT)
* @return tmp.comparative
*/
-
DECLARE vDayRangeStart DATE;
DECLARE vDayRangeEnd DATE;
DECLARE w1, w2, w3, w4, w5, w6, w7 INT;
@@ -59,14 +58,14 @@ proc: BEGIN
END IF;
SELECT MIN(dated) INTO vDayRangeStart
- FROM vn.time
+ FROM `time`
WHERE dated <= vDate
GROUP BY period
ORDER BY dated desc
LIMIT 1 OFFSET vWeekRange;
SELECT MAX(dated) INTO vDayRangeEnd
- FROM vn.time
+ FROM `time`
WHERE dated >= vDate
GROUP BY period
ORDER BY dated ASC
@@ -83,12 +82,11 @@ proc: BEGIN
JOIN itemType t ON t.id = i.typeFk
JOIN itemCategory c ON c.id = t.categoryFk
LEFT JOIN worker w ON w.id = t.workerFk
- WHERE (NOT vHasTypeFilter
- OR t.id IN (SELECT itemTypeFk FROM tmp.comparativeFilterType))
- AND (vBuyerFk IS NULL
- OR t.workerFk = vBuyerFk)
- AND (vIsFloramondo IS NULL
- OR i.isFloramondo = vIsFloramondo);
+ WHERE (NOT vHasTypeFilter OR t.id IN (
+ SELECT itemTypeFk FROM tmp.comparativeFilterType
+ ))
+ AND (vBuyerFk IS NULL OR t.workerFk = vBuyerFk)
+ AND (vIsFloramondo IS NULL OR i.isFloramondo = vIsFloramondo);
IF vDate < util.VN_CURDATE() THEN
ALTER TABLE tmp.itemInventory
@@ -115,10 +113,11 @@ proc: BEGIN
SET i = i + 1;
SELECT t.period INTO vPeriod
- FROM vn.`time` t
+ FROM `time` t
WHERE t.dated = vDayRangeStart + INTERVAL (vWeekCount * (i - 1)) DAY;
- INSERT IGNORE INTO tTable(cy, ly, zy) VALUES(vPeriod, vPeriod - 100, vPeriod - 200);
+ INSERT IGNORE INTO tTable(cy, ly, zy)
+ VALUES(vPeriod, vPeriod - 100, vPeriod - 200);
UNTIL i = vWeekCount END REPEAT;
SELECT cy, ly, zy INTO w1, y1, z1 FROM tTable LIMIT 1;
@@ -130,7 +129,6 @@ proc: BEGIN
SELECT cy, ly, zy INTO w7, y7, z7 FROM tTable WHERE cy > w6 LIMIT 1;
-- Genera una tabla con los datos del año pasado.
-
CREATE OR REPLACE TEMPORARY TABLE tLastYear
(KEY (lItemFk))
ENGINE = MEMORY
@@ -151,15 +149,14 @@ proc: BEGIN
SUM(IF(c.timePeriod = y7, c.price, 0)) lprice7
FROM tmp.itemInventory ai
JOIN comparative c ON c.itemFk = ai.id
- JOIN warehouse w on w.id = c.warehouseFk
+ JOIN warehouse w ON w.id = c.warehouseFk
JOIN tTable wt ON c.timePeriod = wt.ly
- WHERE IFNULL(vWarehouseFk, c.warehouseFk) = c.warehouseFk
+ WHERE (vWarehouseFk IS NULL OR vWarehouseFk = c.warehouseFk)
AND w.isComparative
AND (vCountryFk IS NULL OR c.countryFk = vCountryFk)
GROUP BY ai.id;
- -- Genera una tabla con los datos de hace DOS años.
-
+ -- Genera una tabla con los datos de hace 2 años
CREATE OR REPLACE TEMPORARY TABLE tTwoYearsAgo
(KEY (tItemFk))
ENGINE = MEMORY
@@ -180,73 +177,72 @@ proc: BEGIN
SUM(IF(c.timePeriod = z7, c.price, 0)) vlprice7
FROM tmp.itemInventory ai
JOIN comparative c ON c.itemFk = ai.id
- JOIN warehouse w on w.id = c.warehouseFk
+ JOIN warehouse w ON w.id = c.warehouseFk
JOIN tTable wt ON c.timePeriod = wt.zy
- WHERE IFNULL(vWarehouseFk, c.warehouseFk) = c.warehouseFk
+ WHERE (vWarehouseFk IS NULL OR vWarehouseFk = c.warehouseFk)
AND w.isComparative
AND (vCountryFk IS NULL OR c.countryFk = vCountryFk)
GROUP BY ai.id;
- -- Genera una tabla con los datos de este año.ss
-
+ -- Genera una tabla con los datos de este año
CREATE OR REPLACE TEMPORARY TABLE tCurrentYear
(KEY (cItemFk))
ENGINE = MEMORY
SELECT t.itemFk cItemFk,
- SUM(IF(week = w1, total, 0)) cweek1,
- SUM(IF(week = w2, total, 0)) cweek2,
- SUM(IF(week = w3, total, 0)) cweek3,
- SUM(IF(week = w4, total, 0)) cweek4,
- SUM(IF(week = w5, total, 0)) cweek5,
- SUM(IF(week = w6, total, 0)) cweek6,
- SUM(IF(week = w7, total, 0)) cweek7,
- SUM(IF(week = w1, price, 0)) cprice1,
- SUM(IF(week = w2, price, 0)) cprice2,
- SUM(IF(week = w3, price, 0)) cprice3,
- SUM(IF(week = w4, price, 0)) cprice4,
- SUM(IF(week = w5, price, 0)) cprice5,
- SUM(IF(week = w6, price, 0)) cprice6,
- SUM(IF(week = w7, price, 0)) cprice7
+ SUM(IF(`week` = w1, total, 0)) cweek1,
+ SUM(IF(`week` = w2, total, 0)) cweek2,
+ SUM(IF(`week` = w3, total, 0)) cweek3,
+ SUM(IF(`week` = w4, total, 0)) cweek4,
+ SUM(IF(`week` = w5, total, 0)) cweek5,
+ SUM(IF(`week` = w6, total, 0)) cweek6,
+ SUM(IF(`week` = w7, total, 0)) cweek7,
+ SUM(IF(`week` = w1, price, 0)) cprice1,
+ SUM(IF(`week` = w2, price, 0)) cprice2,
+ SUM(IF(`week` = w3, price, 0)) cprice3,
+ SUM(IF(`week` = w4, price, 0)) cprice4,
+ SUM(IF(`week` = w5, price, 0)) cprice5,
+ SUM(IF(`week` = w6, price, 0)) cprice6,
+ SUM(IF(`week` = w7, price, 0)) cprice7
FROM (
SELECT s.itemFk,
ti.period `week`,
SUM(s.quantity) total,
- TRUNCATE(SUM(s.quantity * s.priceFixed),0) price
- FROM ticket t
+ TRUNCATE(SUM(s.quantity * s.priceFixed), 0) price
+ FROM ticket t FORCE INDEX (Fecha)
JOIN sale s ON t.id = s.ticketFk
- JOIN tmp.itemInventory it ON it.id = s.itemFk
- JOIN time ti ON ti.dated = DATE(t.shipped)
+ JOIN tmp.itemInventory it ON it.id = s.itemFk
+ JOIN `time` ti ON ti.dated = DATE(t.shipped)
JOIN item i ON i.id = s.itemFk
JOIN itemType tp ON tp.id = i.typeFk
JOIN itemCategory ic ON ic.id = tp.categoryFk
JOIN warehouse w ON w.id = t.warehouseFk
- STRAIGHT_JOIN address ad ON ad.id = t.addressFk
- JOIN province p ON p.id = ad.provinceFk
+ JOIN `address` ad ON ad.id = t.addressFk
+ JOIN province p ON p.id = ad.provinceFk
JOIN `client` c ON c.id = ad.clientFk
WHERE t.shipped BETWEEN vDayRangeStart AND util.dayEnd(vDayRangeEnd)
- AND c.typeFk IN ('Normal','handMaking')
- AND w.id = COALESCE(vWarehouseFk, w.id)
+ AND c.typeFk IN ('normal', 'handMaking')
+ AND (vWarehouseFk IS NULL OR vWarehouseFk = w.id)
+ AND (vCountryFk IS NULL OR p.countryFk = vCountryFk)
AND w.isComparative
- AND (vCountryFk IS NULL OR p.countryFk = vCountryFk)
- GROUP BY i.id, week
+ GROUP BY i.id, `week`
) t
GROUP BY t.itemFk;
- -- Genera la tabla con la comparativa.
+ -- Genera la tabla con la comparativa
CREATE OR REPLACE TEMPORARY TABLE tmp.comparative
ENGINE = MEMORY
- SELECT it.subName productor,
- b.packing,
+ SELECT it.subName productor,
+ b.packing,
b.buyingValue costefijo,
b.groupingMode caja,
it.image ArticleImage,
- IFNULL(it.inkFk,"?") color,
+ IFNULL(it.inkFk, '?') color,
tp.code tipo,
it.typeFk tipo_id,
o.code origen,
it.category categoria,
it.stems tallos,
- it.size medida,
+ it.`size` medida,
it.name article,
w.code codigoTrabajador,
tp.categoryFk reino_id,
@@ -257,24 +253,27 @@ proc: BEGIN
it.id Id_Article,
i.buy_id,
tp.life,
- IFNULL(i.sd,0) sd,
+ IFNULL(i.sd, 0) sd,
i.avalaible,
i.visible,
i.buy_date,
e.id provider_id,
it.comment comments,
it.description itemDescription,
- IF(cy.cItemFk IS NULL AND i.visible = 0 AND i.avalaible = 0
- AND IFNULL(i.sd, 0) = 0, FALSE, TRUE) filtret,
+ IF(cy.cItemFk IS NULL AND i.visible = 0
+ AND i.avalaible = 0 AND (i.sd IS NULL OR i.sd = 0),
+ FALSE,
+ TRUE
+ ) filtret,
IF(it.hasMinPrice, FORMAT(it.minPrice, 2), "") pvp,
s.company_name
FROM tmp.itemInventory i
JOIN item it ON it.id = i.id
- LEFT JOIN itemType tp ON tp.id = it.typeFk
- LEFT JOIN worker w ON w.id = tp.workerFk
+ JOIN itemType tp ON tp.id = it.typeFk
+ JOIN worker w ON w.id = tp.workerFk
LEFT JOIN buy b ON b.id = i.buy_id
- LEFT JOIN entry e ON e.id = b.entryFk
- LEFT JOIN origin o ON o.id = it.originFk
+ LEFT JOIN `entry` e ON e.id = b.entryFk
+ JOIN origin o ON o.id = it.originFk
LEFT JOIN tLastYear ly ON ly.lItemFk = it.id
LEFT JOIN tCurrentYear cy ON cy.cItemFk = it.id
LEFT JOIN tTwoYearsAgo zy ON zy.tItemFk = it.id
@@ -287,8 +286,8 @@ proc: BEGIN
OR ly.lweek1 OR ly.lweek2 OR ly.lweek3 OR ly.lweek4 OR ly.lweek5 OR ly.lweek6 OR ly.lweek7
OR zy.vlweek1 OR zy.vlweek2 OR zy.vlweek3 OR zy.vlweek4 OR zy.vlweek5 OR zy.vlweek6 OR zy.vlweek7;
- -- Elimina las tablas temporales creadas...
- DROP TEMPORARY TABLE IF EXISTS tmp.itemInventory,
+ DROP TEMPORARY TABLE IF EXISTS
+ tmp.itemInventory,
tTwoYearsAgo,
tLastYear,
tCurrentYear,
diff --git a/db/routines/vn/procedures/item_devalueA2.sql b/db/routines/vn/procedures/item_devalueA2.sql
new file mode 100644
index 000000000..c9f716d8f
--- /dev/null
+++ b/db/routines/vn/procedures/item_devalueA2.sql
@@ -0,0 +1,408 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_devalueA2`(
+ vSelf INT,
+ vShelvingFK VARCHAR(10),
+ vBuyingValue DECIMAL(10,4),
+ vQuantity INT
+)
+BEGIN
+/**
+ * Devalua un item modificando su calidad de A1 a A2.
+ * Si no existe el item A2 lo crea y genera los movimientos de las entradas
+ * de almacén y shelvings correspondientes
+ *
+ * @param vSelf Id de artículo a devaluar
+ * @param vShelvingFK Ubicación actual del artículo
+ * @param vBuyingValue Nuevo precio de coste
+ * @param vQuantity Cantidad del ítem a pasar a A2
+ */
+ DECLARE vItemA2Fk INT;
+ DECLARE vLastBuyFk BIGINT;
+ DECLARE vA1BuyFk INT;
+ DECLARE vA2BuyFk INT;
+ DECLARE vTargetEntryFk INT;
+ DECLARE vTargetEntryDate DATE;
+ DECLARE vTargetItemShelvingFk BIGINT;
+ DECLARE vWarehouseFk INT;
+ DECLARE vCacheFk INT;
+ DECLARE vLastEntryFk INT;
+ DECLARE vCurrentVisible INT;
+ DECLARE vDevalueTravelFk INT;
+ DECLARE vCurdate DATE;
+ DECLARE vBuyingValueOriginal DECIMAL(10,4);
+
+ DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
+ BEGIN
+ ROLLBACK;
+ RESIGNAL;
+ END;
+
+ IF (SELECT TRUE FROM item WHERE id = vSelf AND (category <> 'A1' OR category IS NULL)) THEN
+ CALL util.throw('Item has not category A1');
+ END IF;
+
+ SELECT warehouseFk INTO vWarehouseFk
+ FROM userConfig
+ WHERE userFk = account.myUser_getId();
+
+ IF NOT vWarehouseFk OR vWarehouseFk IS NULL THEN
+ CALL util.throw ('Operator has not a valid warehouse');
+ END IF;
+
+ IF vQuantity <= 0 OR vQuantity IS NULL THEN
+ CALL util.throw ('The quantity is incorrect');
+ END IF;
+
+ SELECT util.VN_CURDATE() INTO vCurdate;
+
+ SELECT t.id INTO vDevalueTravelFk
+ FROM travel t
+ JOIN travelConfig tc
+ WHERE t.shipped = vCurdate
+ AND t.landed = vCurdate
+ AND t.warehouseInFk = vWarehouseFk
+ AND t.warehouseOutFk = tc.devalueWarehouseOutFk
+ AND t.agencyModeFk = tc.devalueAgencyModeFk
+ LIMIT 1;
+
+ IF NOT vDevalueTravelFk OR vDevalueTravelFk IS NULL THEN
+ INSERT INTO travel (
+ shipped,
+ landed,
+ warehouseInFk,
+ warehouseOutFk,
+ `ref`,
+ isReceived,
+ agencyModeFk)
+ SELECT vCurdate,
+ vCurdate,
+ vWarehouseFk,
+ tc.devalueWarehouseOutFk,
+ tc.devalueRef,
+ TRUE,
+ tc.devalueAgencyModeFk
+ FROM travelConfig tc;
+ SET vDevalueTravelFk = LAST_INSERT_ID();
+ END IF;
+
+ SELECT id, DATE(dated) INTO vTargetEntryFk, vTargetEntryDate
+ FROM `entry` e
+ WHERE DATE(dated) = vCurdate
+ AND typeFk = 'devaluation'
+ AND travelFk = vDevalueTravelFk
+ ORDER BY created DESC
+ LIMIT 1;
+
+ CALL buyUltimate(vWarehouseFk, vCurdate);
+
+ SELECT b.entryFk, bu.buyFk,IFNULL(b.buyingValue, 0) INTO vLastEntryFk, vLastBuyFk, vBuyingValueOriginal
+ FROM tmp.buyUltimate bu
+ JOIN vn.buy b ON b.id = bu.buyFk
+ WHERE bu.itemFk = vSelf
+ AND bu.warehouseFk = vWarehouseFk;
+
+ IF vBuyingValue > vBuyingValueOriginal THEN
+ CALL util.throw ('Price not valid');
+ END IF;
+
+ IF vLastEntryFk IS NULL OR vLastBuyFk IS NULL THEN
+ CALL util.throw ('The item has not a buy');
+ END IF;
+
+ SELECT id,visible INTO vTargetItemShelvingFk, vCurrentVisible
+ FROM itemShelving
+ WHERE shelvingFk = vShelvingFK COLLATE utf8mb3_general_ci
+ AND itemFk = vSelf
+ LIMIT 1;
+
+ IF vCurrentVisible IS NULL THEN
+ CALL util.throw ('The shelving has not a visible for this item');
+ END IF;
+
+ IF vQuantity > vCurrentVisible THEN
+ CALL util.throw('Quantity is greater than visible');
+ END IF;
+
+ START TRANSACTION;
+
+ IF NOT vTargetEntryFk OR vTargetEntryFk IS NULL
+ OR NOT vTargetEntryDate <=> vCurdate THEN
+ INSERT INTO entry(
+ travelFk,
+ supplierFk,
+ dated,
+ commission,
+ currencyFk,
+ companyFk,
+ clonedFrom,
+ typeFk
+ )
+ SELECT vDevalueTravelFk,
+ supplierFk,
+ vCurdate,
+ commission,
+ currencyFk,
+ companyFk,
+ vLastEntryFk,
+ 'devaluation'
+ FROM entry
+ WHERE id = vLastEntryFk;
+
+ SET vTargetEntryFk = LAST_INSERT_ID();
+ END IF;
+
+ SELECT i.id INTO vItemA2Fk
+ FROM item i
+ JOIN (
+ SELECT i.id,
+ i.name,
+ i.subname,
+ i.value5,
+ i.value6,
+ i.value7,
+ i.value8,
+ i.value9,
+ i.value10,
+ i.NumberOfItemsPerCask,
+ i.EmbalageCode,
+ i.quality
+ FROM item i
+ WHERE i.id = vSelf
+ )i2 ON i2.name <=> i.name
+ AND i2.subname <=> i.subname
+ AND i2.value5 <=> i.value5
+ AND i2.value6 <=> i.value6
+ AND i2.value8 <=> i.value8
+ AND i2.value9 <=> i.value9
+ AND i2.value10 <=> i.value10
+ AND i2.NumberOfItemsPerCask <=> i.NumberOfItemsPerCask
+ AND i2.EmbalageCode <=> i.EmbalageCode
+ AND i2.quality <=> i.quality
+ WHERE i.id <> i2.id
+ AND i.category = 'A2'
+ LIMIT 1;
+
+ IF vItemA2Fk IS NULL THEN
+ INSERT INTO item (
+ equivalent,
+ name,
+ `size`,
+ stems,
+ minPrice,
+ isToPrint,
+ family,
+ box,
+ category,
+ originFk,
+ doPhoto,
+ image,
+ inkFk,
+ intrastatFk,
+ hasMinPrice,
+ created,
+ comment,
+ typeFk,
+ generic,
+ producerFk,
+ description,
+ density,
+ relevancy,
+ expenseFk,
+ isActive,
+ longName,
+ subName,
+ minimum,
+ upToDown,
+ supplyResponseFk,
+ hasKgPrice,
+ isFloramondo,
+ isFragile,
+ numberOfItemsPerCask,
+ embalageCode,
+ quality,
+ stemMultiplier,
+ itemPackingTypeFk,
+ packingOut,
+ genericFk,
+ isLaid,
+ lastUsed,
+ weightByPiece,
+ editorFk,
+ recycledPlastic,
+ nonRecycledPlastic)
+ SELECT equivalent,
+ name,
+ `size`,
+ stems,
+ minPrice,
+ isToPrint,
+ family,
+ box,
+ 'A2',
+ originFk,
+ doPhoto,
+ image,
+ inkFk,
+ intrastatFk,
+ hasMinPrice,
+ created,
+ comment,
+ typeFk,
+ generic,
+ producerFk,
+ description,
+ density,
+ relevancy,
+ expenseFk,
+ isActive,
+ longName,
+ subName,
+ minimum,
+ upToDown,
+ supplyResponseFk,
+ hasKgPrice,
+ isFloramondo,
+ isFragile,
+ numberOfItemsPerCask,
+ embalageCode,
+ quality,
+ stemMultiplier,
+ itemPackingTypeFk,
+ packingOut,
+ genericFk,
+ isLaid,
+ lastUsed,
+ weightByPiece,
+ editorFk,
+ recycledPlastic,
+ nonRecycledPlastic
+ FROM item
+ WHERE id = vSelf;
+
+ SET vItemA2Fk = LAST_INSERT_ID();
+
+ INSERT INTO itemTag (itemFk, tagFk, `value`, intValue, priority, editorFk)
+ SELECT vItemA2Fk, tagFk, `value`, intValue, priority, editorFk
+ FROM itemTag
+ WHERE id = vSelf;
+
+ UPDATE itemTaxCountry itc
+ JOIN itemTaxCountry itc2 ON itc2.itemFk = vSelf
+ AND itc2.countryFk = itc.countryFk
+ SET itc2.taxClassFk = itc.taxClassFk
+ WHERE itc.id = vItemA2Fk;
+
+ INSERT INTO itemBotanical (itemFk, genusFk, specieFk)
+ SELECT vItemA2Fk, genusFk, specieFk
+ FROM itemBotanical
+ WHERE itemFk = vSelf;
+ END IF;
+
+ IF vQuantity = vCurrentVisible THEN
+ DELETE FROM itemShelving
+ WHERE id = vTargetItemShelvingFk;
+ ELSE
+ UPDATE itemShelving
+ SET visible = vCurrentVisible - vQuantity
+ WHERE id = vTargetItemShelvingFk;
+ END IF;
+
+ INSERT INTO buy(
+ entryFk,
+ itemFk,
+ quantity,
+ buyingValue,
+ freightValue,
+ isIgnored,
+ stickers,
+ packagingFk,
+ packing,
+ `grouping`,
+ groupingMode,
+ comissionValue,
+ packageValue,
+ price1,
+ price2,
+ price3,
+ minPrice,
+ isChecked,
+ location,
+ weight,
+ itemOriginalFk)
+ SELECT vTargetEntryFk,
+ itemFk,
+ - LEAST(vQuantity, vCurrentVisible),
+ buyingValue,
+ freightValue,
+ TRUE,
+ stickers,
+ packagingFk,
+ packing,
+ `grouping`,
+ groupingMode,
+ comissionValue,
+ packageValue,
+ price1,
+ price2,
+ price3,
+ minPrice,
+ isChecked,
+ location,
+ weight,
+ itemOriginalFk
+ FROM vn.buy
+ WHERE id = vLastBuyFk
+ UNION
+ SELECT vTargetEntryFk,
+ vItemA2Fk,
+ vQuantity,
+ vBuyingValue,
+ freightValue,
+ TRUE,
+ stickers,
+ packagingFk,
+ packing,
+ `grouping`,
+ groupingMode,
+ comissionValue,
+ packageValue,
+ price1,
+ price2,
+ price3,
+ minPrice,
+ isChecked,
+ location,
+ weight,
+ itemOriginalFk
+ FROM vn.buy
+ WHERE id = vLastBuyFk;
+
+ INSERT IGNORE INTO itemShelving (
+ itemFk,
+ shelvingFk,
+ visible,
+ `grouping`,
+ packing,
+ packagingFk,
+ userFk,
+ isChecked)
+ SELECT vItemA2Fk,
+ shelvingFk,
+ vQuantity ,
+ `grouping`,
+ packing,
+ packagingFk,
+ account.myUser_getId(),
+ isChecked
+ FROM itemShelving
+ WHERE itemFK = vSelf
+ AND shelvingFk = vShelvingFK COLLATE utf8mb3_general_ci
+ ON DUPLICATE KEY UPDATE
+ visible = vQuantity + VALUES(visible);
+
+ COMMIT;
+ CALL cache.visible_refresh(vCacheFk, TRUE, vWarehouseFk);
+ CALL cache.available_refresh(vCacheFk, TRUE, vWarehouseFk, vCurdate);
+ CALL buy_recalcPricesByBuy(vA2BuyFk);
+END$$
+DELIMITER ;
\ No newline at end of file
diff --git a/db/routines/vn/procedures/supplierPackaging_ReportSource.sql b/db/routines/vn/procedures/supplierPackaging_ReportSource.sql
index f9d43f925..a3401843a 100644
--- a/db/routines/vn/procedures/supplierPackaging_ReportSource.sql
+++ b/db/routines/vn/procedures/supplierPackaging_ReportSource.sql
@@ -35,7 +35,7 @@ BEGIN
itemFk,
longName,
supplier,
- entryFk,
+ CONCAT('E',entryFk) entryFk,
landed,
`in`,
`out`,
@@ -49,16 +49,98 @@ BEGIN
itemFk,
longName,
supplier,
- 'previous',
+ 'E previous',
vFromDated,
SUM(`in`),
SUM(`out`),
NULL,
- buyingValue
+ AVG(buyingValue)
FROM supplierPackaging
WHERE supplierFk = vSupplierFk
AND landed < vFromDated
GROUP BY itemFk
+ UNION ALL
+ SELECT vSupplierFk,
+ s.itemFk,
+ i.longName,
+ c.name,
+ CONCAT('T',s.ticketFk),
+ DATE(t.shipped),
+ -LEAST(s.quantity,0) `in`,
+ GREATEST(s.quantity,0) `out`,
+ t.warehouseFk,
+ s.price * (100 - s.discount) / 100
+ FROM sale s
+ JOIN item i ON i.id = s.itemFk
+ JOIN packaging p ON p.itemFk = i.id
+ JOIN ticket t ON t.id = s.ticketFk
+ JOIN client c ON c.id = t.clientFk
+ JOIN supplier su ON su.nif = c.fi
+ WHERE su.id = vSupplierFk
+ AND t.shipped >= vFromDated
+ AND p.isPackageReturnable
+ UNION ALL
+ SELECT vSupplierFk,
+ s.itemFk,
+ i.longName,
+ c.name,
+ 'T previous',
+ vFromDated,
+ SUM(-LEAST(s.quantity,0)) `in`,
+ SUM(GREATEST(s.quantity,0)) `out`,
+ NULL,
+ AVG(s.price * (100 - s.discount) / 100)
+ FROM sale s
+ JOIN item i ON i.id = s.itemFk
+ JOIN packaging p ON p.itemFk = i.id
+ JOIN ticket t ON t.id = s.ticketFk
+ JOIN client c ON c.id = t.clientFk
+ JOIN supplier su ON su.nif = c.fi
+ WHERE su.id = vSupplierFk
+ AND t.shipped < vFromDated
+ AND p.isPackageReturnable
+ GROUP BY s.itemFk
+ UNION ALL
+ SELECT vSupplierFk,
+ p.itemFk,
+ i.longName,
+ c.name,
+ CONCAT('TP',tp.ticketFk),
+ DATE(t.shipped),
+ -LEAST(tp.quantity,0) `in`,
+ GREATEST(tp.quantity,0) `out`,
+ t.warehouseFk,
+ 0
+ FROM ticketPackaging tp
+ JOIN packaging p ON p.id = tp.packagingFk
+ JOIN item i ON i.id = p.itemFk
+ JOIN ticket t ON t.id = tp.ticketFk
+ JOIN client c ON c.id = t.clientFk
+ JOIN supplier su ON su.nif = c.fi
+ WHERE su.id = vSupplierFk
+ AND t.shipped >= vFromDated
+ AND p.isPackageReturnable
+ UNION ALL
+ SELECT vSupplierFk,
+ p.itemFk,
+ i.longName,
+ c.name,
+ 'TP previous',
+ vFromDated,
+ SUM(-LEAST(tp.quantity,0)) `in`,
+ SUM(GREATEST(tp.quantity,0)) `out`,
+ NULL,
+ 0
+ FROM ticketPackaging tp
+ JOIN packaging p ON p.id = tp.packagingFk
+ JOIN item i ON i.id = p.itemFk
+ JOIN ticket t ON t.id = tp.ticketFk
+ JOIN client c ON c.id = t.clientFk
+ JOIN supplier su ON su.nif = c.fi
+ WHERE su.id = vSupplierFk
+ AND t.shipped >= vFromDated
+ AND p.isPackageReturnable
+ GROUP BY p.itemFk
ORDER BY itemFk, landed, entryFk
) sub
WHERE `out` OR `in`;
@@ -69,8 +151,8 @@ BEGIN
supplier,
entryFk,
landed,
- `in`,
- `out`,
+ CAST(`in` AS DECIMAL(10,0)) `in`,
+ CAST(`out` AS DECIMAL(10,0)) `out`,
warehouse,
buyingValue,
balance
diff --git a/db/routines/vn/procedures/ticketPackaging_add.sql b/db/routines/vn/procedures/ticketPackaging_add.sql
index d669b95f5..f96068b56 100644
--- a/db/routines/vn/procedures/ticketPackaging_add.sql
+++ b/db/routines/vn/procedures/ticketPackaging_add.sql
@@ -27,7 +27,10 @@ BEGIN
SELECT DISTINCT clientFk
FROM (
SELECT clientFk, SUM(quantity) totalQuantity
- FROM tmp.packagingToInvoice
+ FROM tmp.packagingToInvoice tpi
+ JOIN client c ON c.id = tpi.clientFk
+ LEFT JOIN supplier s ON s.nif = c.fi
+ WHERE s.id IS NULL
GROUP BY itemFk, clientFk
HAVING totalQuantity > 0)sub;
diff --git a/db/routines/vn/procedures/worker_checkMultipleDevice.sql b/db/routines/vn/procedures/worker_checkMultipleDevice.sql
new file mode 100644
index 000000000..00df08d49
--- /dev/null
+++ b/db/routines/vn/procedures/worker_checkMultipleDevice.sql
@@ -0,0 +1,24 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`worker_checkMultipleDevice`(
+ vSelf INT
+)
+BEGIN
+/**
+ * Verify if a worker has multiple assigned devices,
+ * except for freelancers.
+ *
+ * @param vUserFk worker id.
+ */
+ DECLARE vHasPda BOOLEAN;
+ DECLARE vIsFreelance BOOLEAN;
+ DECLARE vMaxDevicesPerUser INT;
+
+ SELECT COUNT(*) INTO vHasPda FROM deviceProductionUser WHERE userFk = vSelf;
+ SELECT IFNULL(isFreelance, FALSE) INTO vIsFreelance FROM worker WHERE id = vSelf;
+ SELECT IFNULL(maxDevicesPerUser, FALSE) INTO vMaxDevicesPerUser FROM deviceProductionConfig LIMIT 1;
+
+ IF NOT vIsFreelance AND vHasPda > vMaxDevicesPerUser THEN
+ CALL util.throw('You can only have one PDA');
+ END IF;
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/triggers/deviceProductionUser_afterInsert.sql b/db/routines/vn/triggers/deviceProductionUser_afterInsert.sql
new file mode 100644
index 000000000..3c8a9a51d
--- /dev/null
+++ b/db/routines/vn/triggers/deviceProductionUser_afterInsert.sql
@@ -0,0 +1,8 @@
+DELIMITER $$
+CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`deviceProductionUser_afterInsert`
+ AFTER INSERT ON `deviceProductionUser`
+ FOR EACH ROW
+BEGIN
+ CALL worker_checkMultipleDevice(NEW.userFk);
+END$$
+DELIMITER ;
diff --git a/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql b/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql
index 055f81790..7318bd99b 100644
--- a/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql
+++ b/db/routines/vn/triggers/deviceProductionUser_beforeUpdate.sql
@@ -3,6 +3,8 @@ CREATE OR REPLACE DEFINER=`root`@`localhost` TRIGGER `vn`.`deviceProductionUser_
BEFORE UPDATE ON `deviceProductionUser`
FOR EACH ROW
BEGIN
+
+ CALL worker_checkMultipleDevice(NEW.userFk);
SET NEW.editorFk = account.myUser_getId();
END$$
DELIMITER ;
diff --git a/db/routines/vn/views/saleVolume.sql b/db/routines/vn/views/saleVolume.sql
index aec739678..ffc6714c6 100644
--- a/db/routines/vn/views/saleVolume.sql
+++ b/db/routines/vn/views/saleVolume.sql
@@ -37,7 +37,7 @@ FROM (
)
JOIN `vn`.`volumeConfig` `vc`
)
- JOIN `vn`.`itemCost` `ic` ON(
+ JOIN `vn`.`itemCost` `ic` FORCE INDEX (`PRIMARY`) ON(
`ic`.`itemFk` = `s`.`itemFk`
AND `ic`.`warehouseFk` = `t`.`warehouseFk`
)
diff --git a/db/routines/vn2008/views/Compres.sql b/db/routines/vn2008/views/Compres.sql
index 557136192..b99dd2b73 100644
--- a/db/routines/vn2008/views/Compres.sql
+++ b/db/routines/vn2008/views/Compres.sql
@@ -28,6 +28,5 @@ AS SELECT `c`.`id` AS `Id_Compra`,
`c`.`workerFk` AS `Id_Trabajador`,
`c`.`weight` AS `weight`,
`c`.`dispatched` AS `dispatched`,
- `c`.`containerFk` AS `container_id`,
`c`.`itemOriginalFk` AS `itemOriginalFk`
FROM `vn`.`buy` `c`
diff --git a/db/versions/10955-orangeRuscus/00-firstScript.sql b/db/versions/10955-orangeRuscus/00-firstScript.sql
new file mode 100644
index 000000000..745c058bf
--- /dev/null
+++ b/db/versions/10955-orangeRuscus/00-firstScript.sql
@@ -0,0 +1,17 @@
+INSERT IGNORE INTO vn.entryType (code, description)
+ VALUES ('devaluation', 'Devaluación');
+
+ALTER TABLE vn.travelConfig ADD IF NOT EXISTS devalueWarehouseOutFk SMALLINT(6) UNSIGNED NULL
+ COMMENT 'Datos del travel para las entradas generadas al devaluar artículos de A1 a A2';
+
+ALTER TABLE vn.travelConfig ADD IF NOT EXISTS devalueAgencyModeFk INT(11) NULL;
+ALTER TABLE vn.travelConfig ADD IF NOT EXISTS devalueRef varchar(20) NULL;
+
+ALTER TABLE vn.travelConfig DROP FOREIGN KEY IF EXISTS travelConfig_agencyMode_FK;
+
+ALTER TABLE vn.travelConfig ADD CONSTRAINT travelConfig_agencyMode_FK
+ FOREIGN KEY (devalueAgencyModeFk) REFERENCES vn.agencyMode(id) ON DELETE SET NULL ON UPDATE CASCADE;
+
+ALTER TABLE vn.travelConfig DROP FOREIGN KEY IF EXISTS travelConfig_warehouse_FK;
+ALTER TABLE vn.travelConfig ADD CONSTRAINT travelConfig_warehouse_FK
+ FOREIGN KEY (devalueWarehouseOutFk) REFERENCES vn.warehouse(id) ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/db/versions/11010-blackChrysanthemum/00-firstScript.sql b/db/versions/11010-blackChrysanthemum/00-firstScript.sql
new file mode 100644
index 000000000..c8dce54b2
--- /dev/null
+++ b/db/versions/11010-blackChrysanthemum/00-firstScript.sql
@@ -0,0 +1,21 @@
+ALTER TABLE vn.deviceProductionUser DROP INDEX IF EXISTS deviceProductionUser_UN;
+
+ALTER TABLE vn.deviceProductionUser DROP FOREIGN KEY IF EXISTS deviceProductionUser_FK;
+
+ALTER TABLE vn.deviceProductionUser DROP PRIMARY KEY;
+
+ALTER TABLE vn.deviceProductionUser ADD IF NOT EXISTS id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY FIRST;
+
+ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_deviceProduction_FK FOREIGN KEY IF NOT EXISTS (deviceProductionFk) REFERENCES vn.deviceProduction(id);
+
+ALTER TABLE vn.deviceProductionUser ADD CONSTRAINT deviceProductionUser_unique UNIQUE KEY IF NOT EXISTS (deviceProductionFk);
+
+ALTER TABLE vn.deviceProductionUser ADD IF NOT EXISTS simSerialNumber TEXT NULL;
+
+ALTER TABLE vn.deviceProductionConfig ADD IF NOT EXISTS maxDevicesPerUser INT UNSIGNED NULL;
+
+UPDATE vn.deviceProductionConfig SET maxDevicesPerUser=1 WHERE id=1;
+
+INSERT IGNORE INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('Worker','getAvailablePda','READ','ALLOW','ROLE','hr');
+
diff --git a/db/versions/11055-wheatPaniculata/00-firstScript.sql b/db/versions/11055-wheatPaniculata/00-firstScript.sql
new file mode 100644
index 000000000..6eec62fd8
--- /dev/null
+++ b/db/versions/11055-wheatPaniculata/00-firstScript.sql
@@ -0,0 +1,5 @@
+ALTER TABLE vn.clientConfig
+ ADD monthsToDisableUser int(10) unsigned DEFAULT NULL NULL;
+
+UPDATE IGNORE vn.clientConfig
+ SET monthsToDisableUser = 12;
\ No newline at end of file
diff --git a/db/versions/11057-chocolateMoss/00-part.sql b/db/versions/11057-chocolateMoss/00-part.sql
new file mode 100644
index 000000000..bd6c69955
--- /dev/null
+++ b/db/versions/11057-chocolateMoss/00-part.sql
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS vn2008.scanTree__;
+DROP TABLE IF EXISTS vn2008.payroll_embargos__;
+DROP TABLE IF EXISTS vn2008.unary_source__;
+DROP TABLE IF EXISTS vn2008.unary_scan_line_buy__;
+DROP TABLE IF EXISTS vn2008.unary_scan_line__;
+DROP TABLE IF EXISTS vn2008.unary_scan__;
+DROP TABLE IF EXISTS vn2008.scan_line__;
+DROP TABLE IF EXISTS vn2008.Familias__;
+DROP TABLE IF EXISTS vn2008.language__;
+DROP TABLE IF EXISTS vn2008.Clientes_dits__;
+DROP TABLE IF EXISTS vn2008.unary_scan_line_expedition__;
+DROP TABLE IF EXISTS vn2008.warehouse_group__;
+DROP TABLE IF EXISTS vn2008.Espionajes__;
+DROP TABLE IF EXISTS vn2008.jerarquia__;
+DROP TABLE IF EXISTS vn2008.wks__;
+DROP TABLE IF EXISTS vn2008.Proveedores_comunicados__;
+DROP TABLE IF EXISTS vn2008.integra2_escala__;
+DROP TABLE IF EXISTS vn2008.cp__;
+DROP TABLE IF EXISTS vn2008.unary__;
+DROP TABLE IF EXISTS vn2008.Estados__;
+DROP TABLE IF EXISTS vn2008.agency_hour__;
+DROP TABLE IF EXISTS vn2008.Reservas__;
+DROP TABLE IF EXISTS vn2008.cyc_declaration__;
+DROP TABLE IF EXISTS vn2008.route__;
+DROP TABLE IF EXISTS vn2008.Proveedores_escritos__;
+DROP TABLE IF EXISTS vn2008.config__;
diff --git a/db/versions/11057-chocolateMoss/01-part.sql b/db/versions/11057-chocolateMoss/01-part.sql
new file mode 100644
index 000000000..59df77f20
--- /dev/null
+++ b/db/versions/11057-chocolateMoss/01-part.sql
@@ -0,0 +1,41 @@
+DROP TABLE IF EXISTS vn2008.form_query__;
+DROP TABLE IF EXISTS vn2008.filtros__;
+DROP TABLE IF EXISTS vn2008.Objetivos__;
+UPDATE IGNORE vn.province
+ SET zoneFk = NULL
+ WHERE zoneFk IN (
+ SELECT zoneFk
+ FROM vn.province
+ WHERE zoneFk IS NOT NULL AND zoneFk NOT IN (SELECT id FROM vn.`zone`)
+ );
+ALTER TABLE vn.province DROP FOREIGN KEY province_zone_fk;
+ALTER TABLE vn.province MODIFY COLUMN zoneFk int(11) DEFAULT NULL NULL;
+ALTER TABLE vn.province ADD CONSTRAINT
+ province_zone_FK FOREIGN KEY (zoneFk) REFERENCES vn.`zone`(id) ON DELETE CASCADE ON UPDATE CASCADE;
+DROP TABLE IF EXISTS vn2008.zones__;
+DROP TABLE IF EXISTS vn2008.rec_translator__;
+DROP TABLE IF EXISTS vn2008.warehouse_joined__;
+DROP TABLE IF EXISTS vn2008.warehouse_filtro__;
+DROP TABLE IF EXISTS vn2008.viaxpress__;
+DROP TABLE IF EXISTS vn2008.cl_que__;
+DROP TABLE IF EXISTS vn2008.Recibos_recorded__;
+RENAME TABLE vn.coolerPathDetail TO vn.coolerPathDetail__;
+ALTER TABLE vn.coolerPathDetail__ DROP FOREIGN KEY coolerPathDetail_FK;
+DROP TABLE IF EXISTS vn2008.cooler_path__;
+DROP TABLE IF EXISTS vn2008.payrroll_apEmpresarial__;
+DROP TABLE IF EXISTS vn2008.Compres_ok__;
+DROP TABLE IF EXISTS vn2008.Movimientos_avisar__;
+DROP TABLE IF EXISTS vn2008.Clases__;
+DROP TABLE IF EXISTS vn2008.payroll_basess__;
+DROP TABLE IF EXISTS vn2008.payroll_tipobasess__;
+DROP TABLE IF EXISTS vn2008.guillen__;
+DROP TABLE IF EXISTS vn2008.guillen_carry__;
+DROP TABLE IF EXISTS vn2008.Series__;
+DROP TABLE IF EXISTS vn2008.Permisos__;
+ALTER TABLE vn.buy DROP FOREIGN KEY buy_FK_1;
+DROP TABLE IF EXISTS vn2008.container__;
+DROP TABLE IF EXISTS vn2008.travel_reserve__;
+DROP TABLE IF EXISTS vn2008.tmpNEWTARIFAS__;
+DROP TABLE IF EXISTS vn2008.Clientes_potenciales__;
+DROP TABLE IF EXISTS vn2008.duaDismissed__;
+DROP TABLE IF EXISTS vn2008.cl_pet__;
diff --git a/db/versions/11057-chocolateMoss/02-part.sql b/db/versions/11057-chocolateMoss/02-part.sql
new file mode 100644
index 000000000..46cda539a
--- /dev/null
+++ b/db/versions/11057-chocolateMoss/02-part.sql
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS vn2008.expeditions_deleted__;
+DROP TABLE IF EXISTS vn2008.Tipos_f11__;
+DROP TABLE IF EXISTS vn2008.commission__;
+DROP TABLE IF EXISTS vn2008.Movimientos_revisar__;
+DROP TABLE IF EXISTS vn2008.recibida_agricola__;
+DROP TABLE IF EXISTS vn2008.tipsa__;
+DROP TABLE IF EXISTS vn2008.rounding__;
+DROP TABLE IF EXISTS vn2008.Informes__;
+DROP TABLE IF EXISTS vn2008.Monitoring__;
+DROP TABLE IF EXISTS vn2008.Forms__;
+DROP TABLE IF EXISTS vn2008.Clientes_event__;
+DROP TABLE IF EXISTS vn2008.wh_selection__;
+DROP TABLE IF EXISTS vn2008.template_bionic_component__;
+DROP TABLE IF EXISTS vn2008.Agencias_province__;
+DROP TABLE IF EXISTS vn2008.travel_pattern__;
+DROP TABLE IF EXISTS vn2008.sort_merge_results_ernesto__;
+DROP TABLE IF EXISTS vn2008.Conteo__;
+DROP TABLE IF EXISTS vn2008.Consignatarios_devices__;
+DROP TABLE IF EXISTS vn2008.link__;
+DROP TABLE IF EXISTS vn2008.agency_warehouse__;
+DROP TABLE IF EXISTS vn2008.warehouse_lc__;
+DROP TABLE IF EXISTS vn2008.emp_day_pay__;
+DROP TABLE IF EXISTS vn2008.Entradas_kop__;
+DROP TABLE IF EXISTS vn2008.dock__;
+DROP TABLE IF EXISTS vn2008.unaryScanFilter__;
+DROP TABLE IF EXISTS vn2008.Grupos__;
+DROP TABLE IF EXISTS vn2008.nichos__;
diff --git a/db/versions/11057-chocolateMoss/03-part.sql b/db/versions/11057-chocolateMoss/03-part.sql
new file mode 100644
index 000000000..e1947f064
--- /dev/null
+++ b/db/versions/11057-chocolateMoss/03-part.sql
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS vn2008.preparation_exception__;
+DROP TABLE IF EXISTS vn2008.Clientes_empresa__;
+DROP TABLE IF EXISTS vn2008.call_information__;
+DROP TABLE IF EXISTS vn2008.template_bionic_price__;
+DROP TABLE IF EXISTS vn2008.invoice_observation__;
+DROP TABLE IF EXISTS vn2008.edi_testigos__;
+DROP TABLE IF EXISTS vn2008.cl_dep__;
+DROP TABLE IF EXISTS vn2008.agencia_descuadre__;
+DROP TABLE IF EXISTS vn2008.payroll_datos__;
+DROP TABLE IF EXISTS vn2008.tblIVA__;
+DROP TABLE IF EXISTS vn2008.cyc__;
+DROP TABLE IF EXISTS vn2008.Tickets_stack__;
+DROP TABLE IF EXISTS vn2008.config_host_forms__;
+DROP TABLE IF EXISTS vn2008.template_bionic_lot__;
+DROP TABLE IF EXISTS vn2008.payroll_bonificaciones__;
+DROP TABLE IF EXISTS vn2008.widget__;
+DROP TABLE IF EXISTS vn2008.accion_dits__;
+DROP TABLE IF EXISTS vn2008.credit_card__;
+DROP TABLE IF EXISTS vn2008.Brasa__;
+DROP TABLE IF EXISTS vn2008.Jefes__;
+DROP TABLE IF EXISTS vn2008.call_option__;
+DROP TABLE IF EXISTS vn2008.expeditions_pictures__;
+DROP TABLE IF EXISTS vn2008.scan__;
+DROP TABLE IF EXISTS vn2008.trolley__;
+DROP TABLE IF EXISTS vn2008.transport__;
+DROP TABLE IF EXISTS vn2008.Baldas__;
diff --git a/db/versions/11058-aquaCataractarum/00-firstScript.sql b/db/versions/11058-aquaCataractarum/00-firstScript.sql
new file mode 100644
index 000000000..98fc910ad
--- /dev/null
+++ b/db/versions/11058-aquaCataractarum/00-firstScript.sql
@@ -0,0 +1,2 @@
+-- Place your SQL code here
+ALTER TABLE floranet.`order` ADD IF NOT EXISTS observations TEXT NULL;
diff --git a/db/versions/11059-crimsonAnthurium/00-firstScript.sql b/db/versions/11059-crimsonAnthurium/00-firstScript.sql
new file mode 100644
index 000000000..b0eade302
--- /dev/null
+++ b/db/versions/11059-crimsonAnthurium/00-firstScript.sql
@@ -0,0 +1,3 @@
+-- Place your SQL code here
+INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
+ VALUES ('RouteConfig','*','READ','ALLOW','ROLE','employee');
diff --git a/db/versions/11061-silverMastic/00-firstScript.sql b/db/versions/11061-silverMastic/00-firstScript.sql
new file mode 100644
index 000000000..32dbc0c2e
--- /dev/null
+++ b/db/versions/11061-silverMastic/00-firstScript.sql
@@ -0,0 +1 @@
+ALTER TABLE vn.buy CHANGE containerFk containerFk__ smallint(5) unsigned DEFAULT NULL NULL;
diff --git a/e2e/paths/03-worker/07_pda.spec.js b/e2e/paths/03-worker/07_pda.spec.js
deleted file mode 100644
index 2b743823e..000000000
--- a/e2e/paths/03-worker/07_pda.spec.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import selectors from '../../helpers/selectors.js';
-import getBrowser from '../../helpers/puppeteer';
-
-describe('Worker pda path', () => {
- let browser;
- let page;
- beforeAll(async() => {
- browser = await getBrowser();
- page = browser.page;
- await page.loginAndModule('hr', 'worker');
- await page.accessToSearchResult('employeeNick');
- await page.accessToSection('worker.card.pda');
- });
-
- afterAll(async() => {
- await browser.close();
- });
-
- it('should check if worker has already a PDA allocated', async() => {
- expect(await page.waitToGetProperty(selectors.workerPda.currentPDA, 'value')).toContain('serialNumber1');
- });
-
- it('should deallocate the PDA', async() => {
- await page.waitToClick(selectors.workerPda.delete);
- let message = await page.waitForSnackbar();
-
- expect(message.text).toContain('PDA deallocated');
- });
-
- it('should allocate a new PDA', async() => {
- await page.autocompleteSearch(selectors.workerPda.newPDA, 'serialNumber2');
- await page.waitToClick(selectors.workerPda.submit);
- let message = await page.waitForSnackbar();
-
- expect(message.text).toContain('PDA allocated');
- });
-
- it('should check if a new PDA has been allocated', async() => {
- expect(await page.waitToGetProperty(selectors.workerPda.currentPDA, 'value')).toContain('serialNumber2');
- });
-});
diff --git a/loopback/common/models/application.js b/loopback/common/models/application.js
index 6bdc2c13a..80c58ddc1 100644
--- a/loopback/common/models/application.js
+++ b/loopback/common/models/application.js
@@ -1,4 +1,3 @@
-
module.exports = function(Self) {
require('../methods/application/status')(Self);
require('../methods/application/post')(Self);
diff --git a/loopback/locale/en.json b/loopback/locale/en.json
index ca76eae42..601a26f5b 100644
--- a/loopback/locale/en.json
+++ b/loopback/locale/en.json
@@ -223,7 +223,8 @@
"printerNotExists": "The printer does not exist",
"There are not picking tickets": "There are not picking tickets",
"ticketCommercial": "The ticket {{ ticket }} for the salesperson {{ salesMan }} is in preparation. (automatically generated message)",
- "This password can only be changed by the user themselves": "This password can only be changed by the user themselves",
- "They're not your subordinate": "They're not your subordinate",
- "InvoiceIn is already booked": "InvoiceIn is already booked"
-}
+ "This password can only be changed by the user themselves": "This password can only be changed by the user themselves",
+ "They're not your subordinate": "They're not your subordinate",
+ "InvoiceIn is already booked": "InvoiceIn is already booked",
+ "This workCenter is already assigned to this agency": "This workCenter is already assigned to this agency"
+}
\ No newline at end of file
diff --git a/loopback/locale/es.json b/loopback/locale/es.json
index f1c57455e..77e707590 100644
--- a/loopback/locale/es.json
+++ b/loopback/locale/es.json
@@ -355,6 +355,8 @@
"No results found": "No se han encontrado resultados",
"InvoiceIn is already booked": "La factura recibida está contabilizada",
"This workCenter is already assigned to this agency": "Este centro de trabajo ya está asignado a esta agencia",
- "Select ticket or client": "Elija un ticket o un client",
- "It was not able to create the invoice": "No se pudo crear la factura"
-}
+ "Select ticket or client": "Elija un ticket o un client",
+ "It was not able to create the invoice": "No se pudo crear la factura",
+ "This PDA is already assigned to another user": "This PDA is already assigned to another user",
+ "ticketCommercial": "El ticket {{ ticket }} para el vendedor {{ salesMan }} está en preparación. (mensaje generado automáticamente)"
+}
\ No newline at end of file
diff --git a/loopback/server/boot/isProduction.js b/loopback/server/boot/isProduction.js
new file mode 100644
index 000000000..151afa9cb
--- /dev/null
+++ b/loopback/server/boot/isProduction.js
@@ -0,0 +1,3 @@
+module.exports = (localAsProduction = true) => {
+ return (!process.env.NODE_ENV && localAsProduction) || process.env.NODE_ENV == 'production';
+};
diff --git a/modules/account/back/models/ldap-config.js b/modules/account/back/models/ldap-config.js
index 89f0add48..583ce084b 100644
--- a/modules/account/back/models/ldap-config.js
+++ b/modules/account/back/models/ldap-config.js
@@ -3,9 +3,10 @@ const app = require('vn-loopback/server/server');
const ldap = require('../util/ldapjs-extra');
const crypto = require('crypto');
const nthash = require('smbhash').nthash;
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
- const shouldSync = process.env.NODE_ENV !== 'test';
+ const shouldSync = isProduction();
Self.getLinker = async function() {
return await Self.findOne({
diff --git a/modules/account/back/models/samba-config.js b/modules/account/back/models/samba-config.js
index 927510a29..359b4b187 100644
--- a/modules/account/back/models/samba-config.js
+++ b/modules/account/back/models/samba-config.js
@@ -1,6 +1,7 @@
const ldap = require('../util/ldapjs-extra');
const execFile = require('child_process').execFile;
+const isProduction = require('vn-loopback/server/boot/isProduction');
/**
* Summary of userAccountControl flags:
@@ -12,7 +13,7 @@ const UserAccountControlFlags = {
};
module.exports = Self => {
- const shouldSync = process.env.NODE_ENV !== 'test';
+ const shouldSync = isProduction();
Self.getLinker = async function() {
return await Self.findOne({
diff --git a/modules/client/back/methods/sms/send.js b/modules/client/back/methods/sms/send.js
index 94b2b6c27..2b5674f86 100644
--- a/modules/client/back/methods/sms/send.js
+++ b/modules/client/back/methods/sms/send.js
@@ -1,5 +1,6 @@
const got = require('got');
const UserError = require('vn-loopback/util/user-error');
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
Self.remoteMethod('send', {
@@ -47,7 +48,7 @@ module.exports = Self => {
let response;
try {
- if (process.env.NODE_ENV !== 'production')
+ if (!isProduction(false))
response = {result: [{status: 'ok'}]};
else {
const jsonTest = {
diff --git a/modules/entry/back/methods/entry/addFromBuy.js b/modules/entry/back/methods/entry/addFromBuy.js
index 307c04b97..e5cc427a8 100644
--- a/modules/entry/back/methods/entry/addFromBuy.js
+++ b/modules/entry/back/methods/entry/addFromBuy.js
@@ -76,7 +76,6 @@ module.exports = Self => {
packing: buyUltimate.packing,
grouping: buyUltimate.grouping,
groupingMode: buyUltimate.groupingMode,
- containerFk: buyUltimate.containerFk,
comissionValue: buyUltimate.comissionValue,
packageValue: buyUltimate.packageValue,
location: buyUltimate.location,
diff --git a/modules/entry/back/models/buy.json b/modules/entry/back/models/buy.json
index 35861fd81..14cafde06 100644
--- a/modules/entry/back/models/buy.json
+++ b/modules/entry/back/models/buy.json
@@ -63,9 +63,6 @@
"isIgnored": {
"type": "boolean"
},
- "containerFk": {
- "type": "number"
- },
"location": {
"type": "number"
},
diff --git a/modules/invoiceOut/back/methods/invoiceOut/download.js b/modules/invoiceOut/back/methods/invoiceOut/download.js
index 748e2df17..f8d42072c 100644
--- a/modules/invoiceOut/back/methods/invoiceOut/download.js
+++ b/modules/invoiceOut/back/methods/invoiceOut/download.js
@@ -1,5 +1,6 @@
const fs = require('fs-extra');
const path = require('path');
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
Self.remoteMethodCtx('download', {
@@ -66,7 +67,7 @@ module.exports = Self => {
console.error(err);
});
- if (process.env.NODE_ENV == 'test') {
+ if (!isProduction()) {
try {
await fs.access(file.path);
} catch (error) {
diff --git a/modules/invoiceOut/back/models/invoice-out.js b/modules/invoiceOut/back/models/invoice-out.js
index e4fcc1a69..b0e05b626 100644
--- a/modules/invoiceOut/back/models/invoice-out.js
+++ b/modules/invoiceOut/back/models/invoice-out.js
@@ -1,6 +1,7 @@
const print = require('vn-print');
const path = require('path');
const UserError = require('vn-loopback/util/user-error');
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
require('../methods/invoiceOut/filter')(Self);
@@ -59,7 +60,7 @@ module.exports = Self => {
hasPdf: true
}, options);
- if (process.env.NODE_ENV !== 'test') {
+ if (isProduction()) {
await print.storage.write(buffer, {
type: 'invoice',
path: pdfFile.path,
diff --git a/modules/mdb/back/methods/mdbVersion/upload.js b/modules/mdb/back/methods/mdbVersion/upload.js
index 58fc46abb..64de72679 100644
--- a/modules/mdb/back/methods/mdbVersion/upload.js
+++ b/modules/mdb/back/methods/mdbVersion/upload.js
@@ -1,6 +1,7 @@
const fs = require('fs-extra');
const path = require('path');
const UserError = require('vn-loopback/util/user-error');
+const isProduction = require('vn-loopback/server/boot/isProduction');
module.exports = Self => {
Self.remoteMethodCtx('upload', {
@@ -111,7 +112,7 @@ module.exports = Self => {
const destinationFile = path.join(
accessContainer.client.root, accessContainer.name, appName, `${toVersion}.7z`);
- if (process.env.NODE_ENV == 'test')
+ if (!isProduction())
await fs.unlink(srcFile);
else {
await fs.move(srcFile, destinationFile, {
diff --git a/modules/route/back/methods/roadmap/clone.js b/modules/route/back/methods/roadmap/clone.js
index 456ed823d..b74cf803c 100644
--- a/modules/route/back/methods/roadmap/clone.js
+++ b/modules/route/back/methods/roadmap/clone.js
@@ -62,12 +62,12 @@ module.exports = Self => {
const clone = await models.Roadmap.create(roadmap, options);
- const expeditionTrucks = roadmap.expeditionTruck();
- expeditionTrucks.map(expeditionTruck => {
- expeditionTruck.roadmapFk = clone.id;
- return expeditionTruck;
+ const roadmapStops = roadmap.roadmapStop();
+ roadmapStops.map(roadmapStop => {
+ roadmapStop.roadmapFk = clone.id;
+ return roadmapStop;
});
- await models.ExpeditionTruck.create(expeditionTrucks, options);
+ await models.RoadmapStop.create(roadmapStops, options);
}
await tx.commit();
diff --git a/modules/route/back/model-config.json b/modules/route/back/model-config.json
index 6cf8da986..09cda6b2d 100644
--- a/modules/route/back/model-config.json
+++ b/modules/route/back/model-config.json
@@ -8,7 +8,7 @@
"DeliveryPoint": {
"dataSource": "vn"
},
- "ExpeditionTruck": {
+ "RoadmapStop": {
"dataSource": "vn"
},
"Roadmap": {
diff --git a/modules/route/back/models/roadmap.json b/modules/route/back/models/roadmap.json
index 2f6bb8c02..01572d718 100644
--- a/modules/route/back/models/roadmap.json
+++ b/modules/route/back/models/roadmap.json
@@ -54,9 +54,9 @@
"model": "Supplier",
"foreignKey": "supplierFk"
},
- "expeditionTruck": {
+ "roadmapStop": {
"type": "hasMany",
- "model": "ExpeditionTruck",
+ "model": "RoadmapStop",
"foreignKey": "roadmapFk"
}
}
diff --git a/modules/route/back/models/expedition-truck.json b/modules/route/back/models/roadmapStop.json
similarity index 92%
rename from modules/route/back/models/expedition-truck.json
rename to modules/route/back/models/roadmapStop.json
index 8edc7347f..51aa3a6db 100644
--- a/modules/route/back/models/expedition-truck.json
+++ b/modules/route/back/models/roadmapStop.json
@@ -1,9 +1,9 @@
{
- "name": "ExpeditionTruck",
+ "name": "RoadmapStop",
"base": "VnModel",
"options": {
"mysql": {
- "table": "expeditionTruck"
+ "table": "roadmapStop"
}
},
"properties": {
diff --git a/modules/route/front/roadmap/stops/index.html b/modules/route/front/roadmap/stops/index.html
index b69492a21..82f30c326 100644
--- a/modules/route/front/roadmap/stops/index.html
+++ b/modules/route/front/roadmap/stops/index.html
@@ -1,22 +1,22 @@