Compare commits

...

58 Commits

Author SHA1 Message Date
Robert Ferrús e2eff4df54 Merge branch 'dev' into 6500-procRefactor8
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-10 12:04:40 +00:00
Ivan Mas bd026af917 Merge pull request 'refs #6732 change name supplier.isSerious to supplier.isReal' (!2063) from 6732-Change-name-vn.supplier.isSerious-to-vn.supplier.isReal into dev
gitea/salix/pipeline/head This commit looks good Details
Reviewed-on: #2063
Reviewed-by: Guillermo Bonet <guillermo@verdnatura.es>
2024-04-10 11:21:19 +00:00
Ivan Mas 85301b84bc Merge branch 'dev' into 6732-Change-name-vn.supplier.isSerious-to-vn.supplier.isReal
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-10 11:18:31 +00:00
Jorge Penadés 0f5afc908c Merge pull request '#6492 refactor vn2008 procedures' (!2159) from 6492-refactorProceduresVn2008 into dev
gitea/salix/pipeline/head This commit looks good Details
Reviewed-on: #2159
Reviewed-by: Carlos Andrés <carlosap@verdnatura.es>
2024-04-10 09:42:06 +00:00
Jorge Penadés 099fb70582 Merge branch 'dev' into 6492-refactorProceduresVn2008
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-10 09:29:15 +00:00
Robert Ferrús acd422d48f Merge pull request 'feat: refs #7150' (!2224) from 7150-greuge_dif_porte_add into dev
gitea/salix/pipeline/head This commit looks good Details
gitea/salix/pipeline/pr-dev This commit looks good Details
Reviewed-on: #2224
Reviewed-by: Carlos Andrés <carlosap@verdnatura.es>
2024-04-10 07:01:13 +00:00
Robert Ferrús 2c91385e62 Merge branch '7150-greuge_dif_porte_add' of https://gitea.verdnatura.es/verdnatura/salix into 7150-greuge_dif_porte_add
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-10 08:09:57 +02:00
Robert Ferrús c30c0de92c feat: refs #7150 2024-04-10 08:09:54 +02:00
Robert Ferrús 3420667ae5 Merge branch 'dev' into 7150-greuge_dif_porte_add
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-10 06:05:03 +00:00
Ivan Mas eedf30a2dd refs #6732 salix dependencies and undo changes Proveedores
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 17:31:34 +02:00
Jorge Penadés a3c1bceb7e refactor: refs #6492 use enum
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 15:57:34 +02:00
Jorge Penadés dca75437f1 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6492-refactorProceduresVn2008
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 15:20:30 +02:00
Ivan Mas 521033edd2 Merge branch 'dev' into 6732-Change-name-vn.supplier.isSerious-to-vn.supplier.isReal
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 11:54:41 +00:00
Guillermo Bonet 0e2e68488d Merge branch 'test' into dev
gitea/salix/pipeline/head This commit looks good Details
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 13:08:54 +02:00
Guillermo Bonet 43111f8192 Merge branch 'master' into test
gitea/salix/pipeline/head This commit looks good Details
2024-04-09 13:08:31 +02:00
Guillermo Bonet 743dc2144e hotfix: refs #6276 Fix send chat msg getSales
gitea/salix/pipeline/head This commit looks good Details
gitea/salix/pipeline/pr-master This commit looks good Details
2024-04-09 13:05:01 +02:00
Jorge Penadés 9a28a59d00 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6492-refactorProceduresVn2008
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 11:11:30 +02:00
Alex Moreno c69a4e1c98 Merge pull request 'refactor(workerDms): adapat to lilium' (!2269) from 6551-workerDms_refactor into dev
gitea/salix/pipeline/head This commit looks good Details
Reviewed-on: #2269
Reviewed-by: Javier Segarra <jsegarra@verdnatura.es>
2024-04-09 08:21:20 +00:00
Guillermo Bonet f8be6be7a3 feat: refs #6636 Minor change
gitea/salix/pipeline/head This commit looks good Details
2024-04-09 10:10:11 +02:00
Guillermo Bonet 9ab71318a9 Merge pull request 'feat: refs #6636 Modified updateClaim, model and tests' (!2256) from 6636-pickup into dev
gitea/salix/pipeline/head This commit looks good Details
Reviewed-on: #2256
Reviewed-by: Javi Gallego <jgallego@verdnatura.es>
Reviewed-by: Alex Moreno <alexm@verdnatura.es>
2024-04-09 08:01:27 +00:00
Guillermo Bonet c42e00f11e Merge branch 'dev' into 6636-pickup
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 07:43:51 +00:00
Guillermo Bonet 449a06c85c feat: refs #6636 Added tests
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 09:43:30 +02:00
Alex Moreno 500244dbed fix id
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 07:51:57 +02:00
Sergio De la torre 47c33c1648 Merge pull request 'refs #6276 hotFix:itemShelving_add' (!2270) from 6276_hotfix_itemShelving_add into master
gitea/salix/pipeline/head This commit looks good Details
Reviewed-on: #2270
Reviewed-by: Alex Moreno <alexm@verdnatura.es>
2024-04-09 05:50:06 +00:00
Robert Ferrús 4a31fe29b8 Merge branch 'dev' into 7150-greuge_dif_porte_add
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-09 05:40:01 +00:00
Sergio De la torre 75293fbb9a refs #6276 hotFix:itemShelving_add
gitea/salix/pipeline/pr-master This commit looks good Details
2024-04-09 07:38:28 +02:00
Alex Moreno 0ecc09fcc4 Merge branch 'dev' into 6551-workerDms_refactor
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-08 12:50:05 +00:00
Alex Moreno 9134216332 refactor(workerDms): adapat to lilium
gitea/salix/pipeline/pr-dev Build queued... Details
2024-04-08 14:46:35 +02:00
Robert Ferrús 6ba43a3c6d Merge branch 'dev' into 7150-greuge_dif_porte_add
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-08 11:29:09 +00:00
Robert Ferrús 0c5b9e3544 Merge branch 'dev' into 7150-greuge_dif_porte_add
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-08 10:28:02 +00:00
Robert Ferrús 657150a9a7 feat: refs #7150 greuge_dif_porte_add
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-08 08:57:56 +02:00
Robert Ferrús 1e8e6a67a3 Merge branch 'dev' into 7150-greuge_dif_porte_add
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-08 06:39:22 +00:00
Robert Ferrús 5517c29c1c fet: refs #7150 greuge_dif_porte_add
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-08 08:37:37 +02:00
Guillermo Bonet e27279e20e Merge branch 'dev' into 6636-pickup
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-08 05:18:36 +00:00
Guillermo Bonet 6c1e44638e feat: refs #6636 Added getEnumValue method
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-05 11:01:00 +02:00
Guillermo Bonet 16a6e3d8a6 feat: refs #6636 Requested change
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-05 08:18:38 +02:00
Guillermo Bonet 1656c8db63 Merge branch '6636-pickup' of https://gitea.verdnatura.es/verdnatura/salix into 6636-pickup
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-05 07:42:04 +02:00
Guillermo Bonet 23db6a41be feat: refs #6636 Minor change 2024-04-05 07:42:03 +02:00
Guillermo Bonet ac658fb6af Merge branch 'dev' into 6636-pickup
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-05 05:29:26 +00:00
Guillermo Bonet fcb4fe92e8 Merge branch 'dev' into 6636-pickup
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-04-04 12:14:23 +00:00
Guillermo Bonet f44e19cae3 feat: refs #6636 Modified updateClaim, model and tests
gitea/salix/pipeline/pr-dev Build queued... Details
2024-04-04 14:15:20 +02:00
Jorge Penadés 0a89cddff9 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6492-refactorProceduresVn2008
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-28 15:04:28 +01:00
Jorge Penadés df271a242d fix: refs #6492 procedure
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-28 15:03:33 +01:00
Jorge Penadés e851c3b481 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6492-refactorProceduresVn2008
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-28 14:15:31 +01:00
Robert Ferrús ed1bc06301 feat: refs #7150
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-27 17:30:52 +01:00
Robert Ferrús 9667d31441 feat: refs #7150
gitea/salix/pipeline/pr-dev There was a failure building this commit Details
2024-03-27 17:00:27 +01:00
Jorge Penadés 94f6d20bb1 feat: refs #6942 add Insert
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-26 13:41:53 +01:00
Jorge Penadés 72baf1e80e Merge branch '6492-refactorProceduresVn2008' of https://gitea.verdnatura.es/verdnatura/salix into 6492-refactorProceduresVn2008
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-26 12:30:16 +01:00
Jorge Penadés 634bfc5091 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6492-refactorProceduresVn2008 2024-03-26 12:30:07 +01:00
Jorge Penadés 2ea9d042e3 Merge branch 'dev' into 6492-refactorProceduresVn2008
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-25 07:57:45 +00:00
Jorge Penadés d7115e40c1 feat: refs #6492 dropping vn2008 procedures
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-14 12:10:08 +01:00
Jorge Penadés 46b7acb52a Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6492-refactorProceduresVn2008
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-14 11:54:35 +01:00
Jorge Penadés ff130b773d fix: refs #6492 drop useless insert
gitea/salix/pipeline/pr-dev There was a failure building this commit Details
2024-03-14 11:49:21 +01:00
Jorge Penadés 3e458281e6 fix: refs #6492 boxes alias
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-14 09:42:54 +01:00
Jorge Penadés 7a94ae3551 Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into 6492-refactorProceduresVn2008
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-14 09:10:44 +01:00
Jorge Penadés 9e596e6525 fix: refs #6492 file names
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-03-12 15:27:09 +01:00
Jorge Penadés 10c2d25cbd feat: refs #6492 create procedures & grant privileges
gitea/salix/pipeline/pr-dev There was a failure building this commit Details
2024-03-12 12:57:34 +01:00
Ivan Mas 48310d24c7 refs #6732 change name supplier.isSerious to supplier.isReal
gitea/salix/pipeline/pr-dev This commit looks good Details
2024-02-21 14:36:12 +01:00
47 changed files with 825 additions and 604 deletions

View File

@ -29,6 +29,7 @@ module.exports = Self => {
});
Self.getSales = async(ctx, collectionOrTicketFk, print, source, options) => {
const models = Self.app.models;
const userId = ctx.req.accessToken.userId;
const myOptions = {userId};
const $t = ctx.req.__;

View File

@ -19,12 +19,12 @@ module.exports = Self => {
}
});
Self.getUrl = async(appName = 'salix') => {
const {url} = await Self.app.models.Url.findOne({
const url = await Self.app.models.Url.findOne({
where: {
appName,
environment: process.env.NODE_ENV || 'development'
}
});
return url;
return url?.url;
};
};

View File

@ -1880,7 +1880,7 @@ INSERT INTO `vn`.`claimRatio`(`clientFk`, `yearSale`, `claimAmount`, `claimingRa
INSERT INTO `vn`.`claimLog` (`originFk`, userFk, `action`, changedModel, oldInstance, newInstance, changedModelId, `description`)
VALUES
(1, 18, 'update', 'Claim', '{"hasToPickUp":false}', '{"hasToPickUp":true}', 1, NULL),
(1, 18, 'update', 'Claim', '{"pickup":null}', '{"pickup":"agency"}', 1, NULL),
(1, 18, 'update', 'ClaimObservation', '{}', '{"claimFk":1,"text":"Waiting for customer"}', 1, NULL),
(1, 18, 'insert', 'ClaimBeginning', '{}', '{"claimFk":1,"saleFk":1,"quantity":10}', 1, NULL),
(1, 18, 'insert', 'ClaimDms', '{}', '{"claimFk":1,"dmsFk":1}', 1, NULL);
@ -2913,7 +2913,8 @@ INSERT INTO `salix`.`url` (`appName`, `environment`, `url`)
VALUES
('lilium', 'development', 'http://localhost:9000/#/'),
('hedera', 'development', 'http://localhost:9090/'),
('salix', 'development', 'http://localhost:5000/#!/');
('salix', 'development', 'http://localhost:5000/#!/'),
('docuware', 'development', 'http://docuware');
INSERT INTO `vn`.`report` (`id`, `name`, `paperSizeFk`, `method`)
VALUES
@ -3735,3 +3736,18 @@ INSERT INTO vn.ticketLog (originFk,userFk,`action`,creationDate,changedModel,new
INSERT INTO `vn`.`supplierDms`(`supplierFk`, `dmsFk`, `editorFk`)
VALUES
(1, 10, 9);
INSERT INTO `vn`.`accountReconciliation` (supplierAccountFk,operationDated,valueDated,amount,concept,debitCredit,calculatedCode,created)
VALUES
(241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',19.36,'BEL 1','debit','2','2023-12-14 08:39:53.000'),
(241,'2023-12-13 00:00:00.000','2023-12-07 00:00:00.000',30226.43,'BEL 2','debit','1','2023-12-14 08:39:53.000'),
(241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',118.81,'RCBO','debit','10','2023-12-14 08:39:53.000'),
(241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ','debit','12','2023-12-14 08:39:53.000'),
(241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',150.03,'TJ','debit','12','2023-12-14 08:39:53.000'),
(241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',2149.71,'RCBO.AMAZON','debit','122','2023-12-14 08:39:53.000'),
(241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',3210.5,'RCBO.VOLVO','debit','121','2023-12-14 08:39:53.000'),
(241,'2023-12-13 00:00:00.000','2023-12-13 00:00:00.000',6513.7,'RCBO.ENERPLUS','debit','120','2023-12-14 08:39:53.000');
INSERT INTO `vn`.`accountReconciliationConfig`(currencyFk, warehouseFk)
VALUES
(1, 1);

View File

@ -1,8 +1,19 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`greuge_dif_porte_add`()
BEGIN
DECLARE datSTART DATETIME DEFAULT TIMESTAMPADD(DAY,-60,util.VN_CURDATE()); -- '2019-07-01'
DECLARE datEND DATETIME DEFAULT TIMESTAMPADD(DAY,-1,util.VN_CURDATE());
/**
* Calculates the greuge based on a specific date in the 'grievanceConfig' table
*/
DECLARE vDateStarted DATETIME;
DECLARE vDateEnded DATETIME DEFAULT (util.VN_CURDATE() - INTERVAL 1 DAY);
DECLARE vDaysAgoOffset INT;
SELECT daysAgoOffset INTO vDaysAgoOffset
FROM vn.greugeConfig;
SET vDateStarted = util.VN_CURDATE() - INTERVAL vDaysAgoOffset DAY;
DROP TEMPORARY TABLE IF EXISTS tmp.dp;
@ -11,35 +22,34 @@ BEGIN
(PRIMARY KEY (ticketFk))
ENGINE = MEMORY
SELECT t.id ticketFk,
SUM((t.zonePrice - t.zoneBonus) * ebv.ratio) AS teorico,
00000.00 as practico,
00000.00 as greuge,
SUM((t.zonePrice - t.zoneBonus) * ebv.ratio) teorico,
00000.00 practico,
00000.00 greuge,
t.clientFk,
t.shipped
FROM
vn.ticket t
JOIN vn2008.Clientes cli ON cli.Id_cliente = t.clientFk
FROM vn.ticket t
JOIN vn.client c ON c.id = t.clientFk
LEFT JOIN vn.expedition e ON e.ticketFk = t.id
JOIN vn.expeditionBoxVol ebv ON ebv.boxFk = e.freightItemFk
JOIN vn.zone z ON t.zoneFk = z.id
WHERE
t.shipped between datSTART AND datEND
AND cli.`real`
AND t.companyFk IN (442 , 567)
AND z.isVolumetric = FALSE
JOIN vn.company cp ON cp.id = t.companyFk
WHERE t.shipped BETWEEN vDateStarted AND vDateEnded
AND c.isRelevant
AND cp.code IN ('VNL', 'VNH')
AND NOT z.isVolumetric
GROUP BY t.id;
-- Agencias que cobran por volumen
INSERT INTO tmp.dp
SELECT sv.ticketFk,
SUM(IFNULL(sv.freight,0)) AS teorico,
00000.00 as practico,
00000.00 as greuge,
SUM(IFNULL(sv.freight,0)) teorico,
00000.00 practico,
00000.00 greuge,
sv.clientFk,
sv.shipped
FROM vn.saleVolume sv
JOIN vn.zone z ON z.id = sv.zoneFk
AND sv.shipped BETWEEN datSTART AND datEND
AND sv.shipped BETWEEN vDateStarted AND vDateEnded
AND z.isVolumetric != FALSE
GROUP BY sv.ticketFk;
@ -48,11 +58,12 @@ BEGIN
CREATE TEMPORARY TABLE tmp.dp_aux
(PRIMARY KEY (ticketFk))
ENGINE = MEMORY
SELECT dp.ticketFk, sum(Cantidad * Valor) as valor
SELECT dp.ticketFk, SUM(s.quantity * sc.value) valor
FROM tmp.dp
JOIN vn2008.Movimientos m ON m.Id_Ticket = dp.ticketFk
JOIN vn2008.Movimientos_componentes mc using(Id_Movimiento)
WHERE mc.Id_Componente = 15
JOIN vn.sale s ON s.ticketFk = dp.ticketFk
JOIN vn.saleComponent sc ON sc.saleFk = s.id
JOIN vn.component c ON c.id = sc.componentFk
WHERE c.code = 'delivery'
GROUP BY dp.ticketFk;
UPDATE tmp.dp
@ -64,10 +75,11 @@ BEGIN
CREATE TEMPORARY TABLE tmp.dp_aux
(PRIMARY KEY (ticketFk))
ENGINE = MEMORY
SELECT dp.ticketFk, sum(g.amount) Importe
SELECT dp.ticketFk, SUM(g.amount) Importe
FROM tmp.dp
JOIN vn.greuge g ON g.ticketFk = dp.ticketFk
WHERE g.greugeTypeFk = 1 -- dif_porte
JOIN vn.greugeType gt ON gt.id = g.greugeTypeFk
WHERE gt.code = 'freightDifference' -- dif_porte
GROUP BY dp.ticketFk;
UPDATE tmp.dp
@ -75,12 +87,12 @@ BEGIN
SET greuge = IFNULL(Importe,0);
INSERT INTO vn.greuge (clientFk,description,amount,shipped,greugeTypeFk,ticketFk)
SELECT dp.clientFk
, concat('dif_porte ', dp.ticketFk)
, round(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) as Importe
, date(dp.shipped)
, 1
,dp.ticketFk
SELECT dp.clientFk,
CONCAT('dif_porte ', dp.ticketFk),
ROUND(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0),2) Importe,
date(dp.shipped),
1,
dp.ticketFk
FROM tmp.dp
JOIN vn.client c ON c.id = dp.clientFk
WHERE ABS(IFNULL(dp.teorico,0) - IFNULL(dp.practico,0) - IFNULL(dp.greuge,0)) > 1

View File

@ -0,0 +1,66 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`addAccountReconciliation`()
BEGIN
/**
* Updates duplicate records in the accountReconciliation table,
* by assigning them a new identifier and then inserts a new entry in the till table.
*/
UPDATE accountReconciliation ar
JOIN (
SELECT id,
calculatedCode,
CONCAT(
calculatedCode,
'(',
ROW_NUMBER() OVER (PARTITION BY calculatedCode ORDER BY id),
')'
) newId
FROM accountReconciliation ar
WHERE calculatedCode IN (
SELECT calculatedCode
FROM accountReconciliation
GROUP BY calculatedCode
HAVING COUNT(*) > 1
)
ORDER BY calculatedCode, id
) sub2 ON ar.id = sub2.id
SET ar.calculatedCode = sub2.newId;
INSERT INTO till(
dated,
isAccountable,
serie,
concept,
`in`,
`out`,
bankFk,
companyFk,
warehouseFk,
supplierAccountFk,
calculatedCode,
InForeignValue,
OutForeignValue,
workerFk
)
SELECT ar.operationDated,
TRUE,
'MB',
ar.concept,
IF(ar.debitCredit = 'credit' AND a.currencyFk = arc.currencyFk, ar.amount, NULL),
IF(ar.debitCredit = 'debit' AND a.currencyFk = arc.currencyFk, ar.amount, NULL),
a.id,
sa.supplierFk,
arc.warehouseFk,
ar.supplierAccountFk,
ar.calculatedCode,
IF(ar.debitCredit = 'credit' AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL),
IF(ar.debitCredit = 'debit' AND NOT a.currencyFk = arc.currencyFk, ar.amount, NULL),
account.myUser_getId()
FROM accountReconciliation ar
JOIN supplierAccount sa ON sa.id = ar.supplierAccountFk
JOIN accounting a ON a.id = sa.accountingFk
LEFT JOIN till t ON t.calculatedCode = ar.calculatedCode
JOIN accountReconciliationConfig arc
WHERE t.id IS NULL;
END$$
DELIMITER ;

View File

@ -0,0 +1,38 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`agencyVolume`()
BEGIN
/**
* Calculates and presents information on shipment and packaging volumes
* for agencies that are not owned for a specific period.
*/
DECLARE vStarted DATETIME DEFAULT util.VN_CURDATE();
DECLARE vEnded DATETIME DEFAULT util.dayEnd(util.VN_CURDATE());
SELECT ag.id agency_id,
CONCAT(RPAD(c.country, 16,' _') ,' ',ag.name) Agencia,
COUNT(*) expediciones,
SUM(t.packages) Bultos,
SUM(tpe.boxes) Faltan
FROM ticket t
JOIN warehouse w ON w.id = t.warehouseFk
JOIN country c ON w.countryFk = c.id
JOIN address a ON a.id = t.addressFk
JOIN agencyMode am ON am.id = t.agencyModeFk
JOIN agency ag ON ag.id = am.agencyFk
JOIN (
SELECT sv.ticketFk,
CEIL(1000 * SUM(sv.volume) / vc.standardFlowerBox) boxes
FROM ticket t
JOIN saleVolume sv ON sv.ticketFk = t.id
JOIN volumeConfig vc
WHERE t.shipped BETWEEN vStarted AND vEnded
AND (t.packages IS NULL OR NOT t.packages)
GROUP BY t.id
) tpe ON tpe.ticketFk = t.id
WHERE t.shipped BETWEEN vStarted AND vEnded
AND NOT ag.isOwn
GROUP BY ag.id
ORDER BY Agencia;
END$$
DELIMITER ;

View File

@ -21,7 +21,6 @@ BEGIN
SELECT barcodeToItem(vBarcode) INTO vItemFk;
SET vPacking = COALESCE(vPacking, GREATEST(vn.itemPacking(vBarcode,vWarehouseFk), 1));
SET vQuantity = vQuantity * vPacking;
IF (SELECT COUNT(*) FROM shelving WHERE code = vShelvingFk COLLATE utf8_unicode_ci) = 0 THEN

View File

@ -1,33 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`account_conciliacion_add`()
BEGIN
UPDATE account_conciliacion ac
JOIN
(
SELECT idaccount_conciliacion, @c:= if(@id = id_calculated, @c + 1, 1) contador,
@id:= id_calculated as id_calculated, concat(id_calculated,'(',@c,')') as new_id
FROM account_conciliacion
JOIN
(
select id_calculated, count(*) rep, @c:= 0, @id:= concat('-',id_calculated)
from account_conciliacion
group by id_calculated
having rep > 1
) sub using(id_calculated)
) sub2 using(idaccount_conciliacion)
SET ac.id_calculated = sub2.new_id;
INSERT INTO Cajas(Cajafecha, Partida, Serie, Concepto, Entrada,
Salida, Id_Banco,empresa_id, warehouse_id,
Proveedores_account_id, id_calculated, InForeignValue, OutForeignValue, Id_Trabajador)
SELECT Fechaoperacion, TRUE, 'MB', ac.Concepto, IF(DebeHaber = 2 AND currencyFk = 1, importe,null),
IF(DebeHaber = 1 AND currencyFk = 1, importe, null), a.id, sa.supplierFk, 1,
ac.Id_Proveedores_account, ac.id_calculated, IF(DebeHaber = 2 AND NOT currencyFk = 1, importe, null),
IF(DebeHaber = 1 AND NOT currencyFk = 1, importe, null), account.myUser_getId()
FROM account_conciliacion ac
JOIN vn.supplierAccount sa on sa.id = ac.Id_Proveedores_account
JOIN vn.accounting a ON a.id = sa.accountingFk
LEFT JOIN Cajas c on c.id_calculated = ac.id_calculated
WHERE c.Id_Caja IS NULL;
END$$
DELIMITER ;

View File

@ -1,44 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`agencia_volume`()
BEGIN
DECLARE vStarted DATETIME DEFAULT TIMESTAMP(util.VN_CURDATE());
DECLARE vEnded DATETIME DEFAULT TIMESTAMP(util.VN_CURDATE(), '23:59:59');
DROP TEMPORARY TABLE IF EXISTS tmp.ticket_PackagingEstimated;
CREATE TEMPORARY TABLE tmp.ticket_PackagingEstimated
(
ticketFk INT PRIMARY KEY
,boxes INT DEFAULT 0
);
INSERT INTO tmp.ticket_PackagingEstimated(ticketFk, boxes)
SELECT sv.ticketFk, CEIL(1000 * sum(sv.volume) / vc.standardFlowerBox)
FROM vn.ticket t
JOIN vn.saleVolume sv ON sv.ticketFk = t.id
JOIN vn.volumeConfig vc
WHERE t.shipped BETWEEN vStarted AND vEnded
AND IFNULL(t.packages,0) = 0
GROUP BY t.id;
SELECT * FROM
(
SELECT ag.id agency_id,
CONCAT(RPAD(c.country, 16,' _') ,' ',ag.name) Agencia,
count(*) expediciones,
sum(t.packages) Bultos,
sum(tpe.boxes) Faltan
FROM vn.ticket t
JOIN vn.warehouse w ON w.id = t.warehouseFk
JOIN vn.country c ON w.countryFk = c.id
JOIN vn.address a ON a.id = t.addressFk
JOIN vn.agencyMode am ON am.id = t.agencyModeFk
JOIN vn.agency ag ON ag.id = am.agencyFk
JOIN tmp.ticket_PackagingEstimated tpe ON tpe.ticketFk = t.id
WHERE t.shipped BETWEEN vStarted AND vEnded
AND ag.isOwn = FALSE
GROUP BY ag.id
) sub
ORDER BY Agencia;
DROP TEMPORARY TABLE tmp.ticket_PackagingEstimated;
END$$
DELIMITER ;

View File

@ -1,15 +0,0 @@
DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn2008`.`article`()
BEGIN
/**
* Crea la tabla temporal: article_inventory
*/
DROP TEMPORARY TABLE IF EXISTS article_inventory;
CREATE TEMPORARY TABLE article_inventory
(
`article_id` INT(11) NOT NULL PRIMARY KEY,
`future` DATETIME
)
ENGINE = MEMORY;
END$$
DELIMITER ;

View File

@ -0,0 +1 @@
ALTER TABLE vn.supplier CHANGE COLUMN isSerious isReal tinyint(1) unsigned NOT NULL DEFAULT 0;

View File

@ -0,0 +1,8 @@
CREATE OR REPLACE TABLE `vn`.`accountReconciliationConfig` (
`id` INT AUTO_INCREMENT,
`currencyFk` TINYINT(3) unsigned,
`warehouseFk` SMALLINT(6) unsigned,
PRIMARY KEY (`id`),
CONSTRAINT `account_fk_currency` FOREIGN KEY (`currencyFk`) REFERENCES `currency` (`id`),
CONSTRAINT `account_fk_warehouse` FOREIGN KEY (`warehouseFk`) REFERENCES `warehouse` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;

View File

@ -0,0 +1,2 @@
INSERT INTO `vn`.`accountReconciliationConfig`(currencyFk, warehouseFk)
VALUES (1, 1);

View File

@ -0,0 +1,13 @@
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`agencyVolume`()
BEGIN
END;
REVOKE EXECUTE ON PROCEDURE `vn2008`.`agencia_volume` FROM `agency`;
GRANT EXECUTE ON PROCEDURE `vn`.`agencyVolume` TO `agency`;
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`addAccountReconciliation`()
BEGIN
END;
REVOKE EXECUTE ON PROCEDURE `vn2008`.`account_conciliacion_add` FROM `financial`;
GRANT EXECUTE ON PROCEDURE `vn`.`addAccountReconciliation` TO `financial`;

View File

@ -0,0 +1 @@
ALTER TABLE `vn`.`accountReconciliation` MODIFY debitCredit ENUM('debit', 'credit');

View File

@ -0,0 +1,4 @@
ALTER TABLE IF EXISTS `vn`.`greugeConfig`
ADD COLUMN IF NOT EXISTS `daysAgoOffset` int(11) NOT NULL;
UPDATE vn.greugeConfig SET daysAgoOffset=15;

View File

@ -0,0 +1,20 @@
CREATE OR REPLACE TEMPORARY TABLE tmp.claimsWithHasToPickUp
SELECT id
FROM vn.claim
WHERE hasToPickUp;
ALTER TABLE vn.claim CHANGE hasToPickUp pickup ENUM('agency', 'delivery') DEFAULT NULL;
UPDATE vn.claim c
JOIN tmp.claimsWithHasToPickUp tmp ON tmp.id = c.id
SET c.pickup = 'delivery';
-- Solved bug empty value
UPDATE vn.claim
SET pickup = NULL
WHERE pickup = '';
DROP TEMPORARY TABLE tmp.claimsWithHasToPickUp;
INSERT INTO salix.ACL (model,property,accessType,principalId)
VALUES ('Application','getEnumValues','*','employee');

View File

@ -762,7 +762,6 @@ export default {
claimBasicData: {
claimState: 'vn-claim-basic-data vn-autocomplete[ng-model="$ctrl.claim.claimStateFk"]',
packages: 'vn-input-number[ng-model="$ctrl.claim.packages"]',
hasToPickUpCheckbox: 'vn-claim-basic-data vn-check[ng-model="$ctrl.claim.hasToPickUp"]',
saveButton: `button[type=submit]`
},
claimDetail: {
@ -1259,7 +1258,7 @@ export default {
},
supplierBasicData: {
alias: 'vn-supplier-basic-data vn-textfield[ng-model="$ctrl.supplier.nickname"]',
isSerious: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isSerious"]',
isReal: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isReal"]',
isActive: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isActive"]',
isPayMethodChecked: 'vn-supplier-basic-data vn-check[ng-model="$ctrl.supplier.isPayMethodChecked"]',
notes: 'vn-supplier-basic-data vn-textarea[ng-model="$ctrl.supplier.note"]',

View File

@ -36,7 +36,6 @@ describe('Claim edit basic data path', () => {
it('should check the "Pick up" checkbox', async() => {
await page.reloadSection('claim.card.basicData');
await page.waitToClick(selectors.claimBasicData.hasToPickUpCheckbox);
await page.waitToClick(selectors.claimBasicData.saveButton);
const message = await page.waitForSnackbar();
@ -51,12 +50,6 @@ describe('Claim edit basic data path', () => {
expect(result).toEqual('Resuelto');
});
it('should confirm the "is paid with mana" and "Pick up" checkbox are checked', async() => {
const hasToPickUpCheckbox = await page.checkboxState(selectors.claimBasicData.hasToPickUpCheckbox);
expect(hasToPickUpCheckbox).toBe('checked');
});
it('should confirm the claim packages was edited', async() => {
const result = await page
.waitToGetProperty(selectors.claimBasicData.packages, 'value');

View File

@ -20,7 +20,7 @@ describe('Supplier basic data path', () => {
it('should edit the basic data', async() => {
await page.clearInput(selectors.supplierBasicData.alias);
await page.write(selectors.supplierBasicData.alias, 'Plants Nick SL');
await page.waitToClick(selectors.supplierBasicData.isSerious);
await page.waitToClick(selectors.supplierBasicData.isReal);
await page.waitToClick(selectors.supplierBasicData.isActive);
await page.waitToClick(selectors.supplierBasicData.isPayMethodChecked);
await page.write(selectors.supplierBasicData.notes, 'Some notes');
@ -41,8 +41,8 @@ describe('Supplier basic data path', () => {
expect(result).toEqual('Plants Nick SL');
});
it('should check the isSerious checkbox is now checked', async() => {
const result = await page.checkboxState(selectors.supplierBasicData.isSerious);
it('should check the isReal checkbox is now checked', async() => {
const result = await page.checkboxState(selectors.supplierBasicData.isReal);
expect(result).toBe('checked');
});

View File

@ -0,0 +1,56 @@
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
const UserError = require('vn-loopback/util/user-error');
module.exports = Self => {
Self.remoteMethod('getEnumValues', {
description: 'Return enum values of column',
accessType: 'EXECUTE',
accepts: [
{
arg: 'schema',
type: 'string',
description: 'The schema of db',
required: true,
},
{
arg: 'table',
type: 'string',
description: 'The table of schema',
required: true,
},
{
arg: 'column',
type: 'string',
description: 'The column of table',
required: true,
},
],
returns: {
type: 'any',
root: true
},
http: {
path: `/get-enum-values`,
verb: 'GET'
}
});
Self.getEnumValues = async(schema, table, column) => {
const stmt = new ParameterizedSQL(`
SELECT COLUMN_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = ?
AND TABLE_NAME = ?
AND COLUMN_NAME = ?
AND DATA_TYPE = 'enum';`,
[schema, table, column]);
const conn = Self.dataSource.connector;
const [result] = await conn.executeStmt(stmt);
if (!result) throw new UserError(`No results found`);
const regex = /'([^']*)'/g;
return result.COLUMN_TYPE.match(regex).map(match => match.slice(1, -1));
};
};

View File

@ -0,0 +1,35 @@
const models = require('vn-loopback/server/server').models;
describe('Application getEnumValues()', () => {
let tx;
beforeEach(async() => {
tx = await models.Application.beginTransaction({});
const options = {transaction: tx};
await models.Application.rawSql(`
CREATE TABLE tableWithEnum (
direction enum('in', 'out', 'middle'),
PRIMARY KEY (direction)
) ENGINE=InnoDB;
`, null, options);
});
it('should return three if is ok', async() => {
try {
const options = {transaction: tx};
const response = await models.Application.getEnumValues(
'vn',
'tableWithEnum',
'direction',
options
);
expect(response.length).toEqual(3);
await tx.rollback();
} catch (e) {
await tx.rollback();
throw e;
}
});
});

View File

@ -5,4 +5,5 @@ module.exports = function(Self) {
require('../methods/application/execute')(Self);
require('../methods/application/executeProc')(Self);
require('../methods/application/executeFunc')(Self);
require('../methods/application/getEnumValues')(Self);
};

View File

@ -68,7 +68,7 @@
"Changed client paymethod": "I have changed the pay method for client [{{clientName}} ({{clientId}})]({{{url}}})",
"Sent units from ticket": "I sent *{{quantity}}* units of [{{concept}} ({{itemId}})]({{{itemUrl}}}) to *\"{{nickname}}\"* coming from ticket id [{{ticketId}}]({{{ticketUrl}}})",
"Change quantity": "{{concept}} change of {{oldQuantity}} to {{newQuantity}}",
"Claim will be picked": "The product from the claim [({{claimId}})]({{{claimUrl}}}) from the client *{{clientName}}* will be picked",
"Claim will be picked": "The product from the claim [({{claimId}})]({{{claimUrl}}}) from the client *{{clientName}}* will be picked, with the pickup type *{{claimPickup}}*",
"Claim state has changed to": "The state of the claim [({{claimId}})]({{{claimUrl}}}) from client *{{clientName}}* has changed to *{{newState}}*",
"Customs agent is required for a non UEE member": "Customs agent is required for a non UEE member",
"Incoterms is required for a non UEE member": "Incoterms is required for a non UEE member",
@ -89,6 +89,8 @@
"landed": "Landed",
"addressFk": "Address",
"companyFk": "Company",
"agency": "Agency",
"delivery": "Delivery",
"You need to fill sage information before you check verified data": "You need to fill sage information before you check verified data",
"The social name cannot be empty": "The social name cannot be empty",
"The nif cannot be empty": "The nif cannot be empty",

View File

@ -135,7 +135,7 @@
"Changed client paymethod": "He cambiado la forma de pago del cliente [{{clientName}} ({{clientId}})]({{{url}}})",
"Sent units from ticket": "Envio *{{quantity}}* unidades de [{{concept}} ({{itemId}})]({{{itemUrl}}}) a *\"{{nickname}}\"* provenientes del ticket id [{{ticketId}}]({{{ticketUrl}}})",
"Change quantity": "{{concept}} cambia de {{oldQuantity}} a {{newQuantity}}",
"Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*",
"Claim will be picked": "Se recogerá el género de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}*, con el tipo de recogida *{{claimPickup}}*",
"Claim state has changed to": "Se ha cambiado el estado de la reclamación [({{claimId}})]({{{claimUrl}}}) del cliente *{{clientName}}* a *{{newState}}*",
"Client checked as validated despite of duplication": "Cliente comprobado a pesar de que existe el cliente id {{clientId}}",
"ORDER_ROW_UNAVAILABLE": "No hay disponibilidad de este producto",
@ -168,6 +168,8 @@
"landed": "F. entrega",
"addressFk": "Consignatario",
"companyFk": "Empresa",
"agency": "Agencia",
"delivery": "Reparto",
"The social name cannot be empty": "La razón social no puede quedar en blanco",
"The nif cannot be empty": "El NIF no puede quedar en blanco",
"You need to fill sage information before you check verified data": "Debes rellenar la información de sage antes de marcar datos comprobados",
@ -349,5 +351,6 @@
"The address of the customer must have information about Incoterms and Customs Agent": "El consignatario del cliente debe tener informado Incoterms y Agente de aduanas",
"The line could not be marked": "La linea no puede ser marcada",
"This password can only be changed by the user themselves": "Esta contraseña solo puede ser modificada por el propio usuario",
"They're not your subordinate": "No es tu subordinado/a."
"They're not your subordinate": "No es tu subordinado/a.",
"No results found": "No se han encontrado resultados"
}

View File

@ -6,7 +6,6 @@ columns:
isChargedToMana: charged to mana
created: created
responsibility: responsibility
hasToPickUp: has to pickUp
ticketFk: ticket
claimStateFk: claim state
workerFk: worker

View File

@ -6,7 +6,6 @@ columns:
isChargedToMana: cargado al maná
created: creado
responsibility: responsabilidad
hasToPickUp: es recogida
ticketFk: ticket
claimStateFk: estado reclamación
workerFk: trabajador

View File

@ -11,7 +11,7 @@ describe('claim log()', () => {
model: 'Claim',
action: 'update',
changes: [
{property: 'hasToPickUp', before: false, after: true}
{property: 'pickup', before: null, after: 'agency'}
]
};

View File

@ -86,7 +86,7 @@ describe('Update Claim', () => {
args: {
observation: 'valid observation',
claimStateFk: pendingState,
hasToPickUp: false
pickup: null
}
};
ctx.req.__ = i18n.__;
@ -124,7 +124,7 @@ describe('Update Claim', () => {
args: {
observation: 'valid observation',
claimStateFk: canceledState,
hasToPickUp: false
pickup: null
}
};
ctx.req.__ = i18n.__;
@ -163,7 +163,7 @@ describe('Update Claim', () => {
claimStateFk: 3,
workerFk: 5,
observation: 'another valid observation',
hasToPickUp: true
pickup: 'agency'
}
};
ctx.req.__ = i18n.__;

View File

@ -27,8 +27,8 @@ module.exports = Self => {
type: 'string'
},
{
arg: 'hasToPickUp',
type: 'boolean'
arg: 'pickup',
type: 'any'
},
{
arg: 'packages',
@ -72,9 +72,7 @@ module.exports = Self => {
// Get sales person from claim client
const salesPerson = claim.client().salesPersonUser();
let changedHasToPickUp = false;
if (args.hasToPickUp)
changedHasToPickUp = true;
const changedPickup = args.pickup != claim.pickup;
// Validate when claimState has been changed
if (args.claimStateFk) {
@ -82,15 +80,15 @@ module.exports = Self => {
const canEditNewState = await models.ClaimState.isEditable(ctx, args.claimStateFk, myOptions);
const canEditState = await models.ACL.checkAccessAcl(ctx, 'Claim', 'editState', 'WRITE');
if (!canEditOldState || !canEditNewState || changedHasToPickUp && !canEditState)
if (!canEditOldState || !canEditNewState || changedPickup && !canEditState)
throw new UserError(`You don't have enough privileges to change that field`);
}
delete args.ctx;
const updatedClaim = await claim.updateAttributes(args, myOptions);
// When hasToPickUp has been changed
if (salesPerson && changedHasToPickUp && updatedClaim.hasToPickUp)
// When pickup has been changed
if (salesPerson && changedPickup && updatedClaim.pickup)
await notifyPickUp(ctx, salesPerson.id, claim);
// When claimState has been changed
@ -132,7 +130,8 @@ module.exports = Self => {
const message = $t('Claim will be picked', {
claimId: claim.id,
clientName: claim.client().name,
claimUrl: `${url}claim/${claim.id}/summary`
claimUrl: `${url}claim/${claim.id}/summary`,
claimPickup: $t(claim.pickup)
});
await models.Chat.sendCheckingPresence(ctx, workerId, message);
}

View File

@ -31,8 +31,8 @@
"responsibility": {
"type": "number"
},
"hasToPickUp": {
"type": "boolean"
"pickup": {
"type": "string"
},
"ticketFk": {
"type": "number"

View File

@ -85,7 +85,7 @@ describe('claim', () => {
it('should perform a patch query and show a success message', () => {
jest.spyOn(controller.vnApp, 'showSuccess');
const data = {hasToPickUp: true};
const data = {pickup: 'agency'};
$httpBackend.expect('PATCH', `Claims/1/updateClaimAction`, data).respond({});
controller.save(data);
$httpBackend.flush();

View File

@ -49,13 +49,6 @@
label="Packages received"
ng-model="$ctrl.claim.packages">
</vn-input-number>
<vn-check
class="vn-mr-md"
label="Pick up"
ng-model="$ctrl.claim.hasToPickUp"
vn-acl="claimManager"
title="{{'When checked will notify to the salesPerson' | translate}}">
</vn-check>
</vn-horizontal>
</vn-card>
<vn-button-bar>

View File

@ -49,13 +49,6 @@
label="Attended by"
value="{{$ctrl.summary.claim.worker.user.nickname}}">
</vn-label-value>
<vn-check
class="vn-mr-md"
label="Pick up"
ng-model="$ctrl.summary.claim.hasToPickUp"
title="{{'When checked will notify to the salesPerson' | translate}}"
disabled="true">
</vn-check>
</vn-auto>
<vn-auto>
<h4 ng-show="$ctrl.isSalesPerson && $ctrl.summary.observations.length">

View File

@ -1,4 +1,4 @@
const {models} = require('vn-loopback/server/server');
const { models } = require('vn-loopback/server/server');
const LoopBackContext = require('loopback-context');
// #6276
@ -8,11 +8,11 @@ describe('ItemShelving upsertItem()', () => {
let options;
let tx;
beforeEach(async() => {
beforeEach(async () => {
ctx = {
req: {
accessToken: {userId: 9},
headers: {origin: 'http://localhost'}
accessToken: { userId: 9 },
headers: { origin: 'http://localhost' }
},
args: {}
};
@ -21,36 +21,37 @@ describe('ItemShelving upsertItem()', () => {
active: ctx.req
});
options = {transaction: tx};
options = { transaction: tx };
tx = await models.ItemShelving.beginTransaction({});
options.transaction = tx;
});
afterEach(async() => {
afterEach(async () => {
await tx.rollback();
});
xit('should add two new records', async() => {
it('should add two new records', async () => {
const shelvingFk = 'ZPP';
const items = [1, 1, 1, 2];
await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options);
const itemShelvings = await models.ItemShelving.find({where: {shelvingFk}}, options);
const itemShelvings = await models.ItemShelving.find({ where: { shelvingFk } }, options);
expect(itemShelvings.length).toEqual(2);
});
xit('should update the visible items', async() => {
it('should update the visible items', async () => {
const shelvingFk = 'GVC';
const items = [2, 2];
const {visible: itemsBefore} = await models.ItemShelving.findOne({
where: {shelvingFk, itemFk: items[0]}
const { visible: visibleItemsBefore } = await models.ItemShelving.findOne({
where: { shelvingFk, itemFk: items[0] }
}, options);
await models.ItemShelving.upsertItem(ctx, shelvingFk, items, warehouseFk, options);
const {visible: itemsAfter} = await models.ItemShelving.findOne({
where: {shelvingFk, itemFk: items[0]}
const { visible: visibleItemsAfter } = await models.ItemShelving.findOne({
where: { shelvingFk, itemFk: items[0] }
}, options);
expect(itemsAfter).toEqual(itemsBefore + 2);
expect(visibleItemsAfter).toEqual(visibleItemsBefore + 2);
});
});

View File

@ -11,7 +11,7 @@ columns:
postcodeFk: postcode
isActive: active
isOfficial: official
isSerious: serious
isReal: real
isTrucker: trucker
note: note
street: street

View File

@ -11,7 +11,7 @@ columns:
postcodeFk: código postal
isActive: activo
isOfficial: oficial
isSerious: serio
isReal: real
isTrucker: camionero
note: nota
street: calle

View File

@ -25,7 +25,7 @@ module.exports = Self => {
'id',
'name',
'nickname',
'isSerious',
'isReal',
'isActive',
'note',
'nif',

View File

@ -48,7 +48,7 @@
"isOfficial": {
"type": "boolean"
},
"isSerious": {
"isReal": {
"type": "boolean"
},
"isTrucker": {

View File

@ -26,7 +26,7 @@
<vn-horizontal>
<vn-check
label="Verified"
ng-model="$ctrl.supplier.isSerious">
ng-model="$ctrl.supplier.isReal">
</vn-check>
<vn-check
label="Active"

View File

@ -32,7 +32,7 @@
<vn-icon
vn-tooltip="Unverified supplier"
icon="icon-supplierfalse"
ng-if="$ctrl.supplier.isSerious == false">
ng-if="$ctrl.supplier.isReal == false">
</vn-icon>
</div>
<div class="quicklinks">

View File

@ -40,7 +40,7 @@ class Controller extends Descriptor {
'payDemFk',
'payDay',
'isActive',
'isSerious',
'isReal',
'isTrucker',
'account'
],

View File

@ -26,7 +26,7 @@ describe('Supplier Component vnSupplierDescriptor', () => {
'payDemFk',
'payDay',
'isActive',
'isSerious',
'isReal',
'isTrucker',
'account'
],

View File

@ -44,7 +44,7 @@
</vn-label-value>
<vn-check
label="Verified"
ng-model="$ctrl.summary.isSerious"
ng-model="$ctrl.summary.isReal"
disabled="true">
</vn-check>
<vn-check

View File

@ -1,4 +1,5 @@
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;
const {mergeFilters, mergeWhere} = require('vn-loopback/util/filter');
module.exports = Self => {
Self.remoteMethodCtx('filter', {
@ -33,28 +34,31 @@ module.exports = Self => {
const userId = ctx.req.accessToken.userId;
const models = Self.app.models;
// Get ids alloweds
const account = await models.VnUser.findById(userId);
const stmt = new ParameterizedSQL(
`SELECT d.id dmsFk, d.reference, d.description, d.file, d.created, d.hardCopyNumber, d.hasFile
`SELECT d.id, d.id dmsFk
FROM workerDocument wd
JOIN dms d ON d.id = wd.document
JOIN dmsType dt ON dt.id = d.dmsTypeFk
LEFT JOIN account.roleRole rr ON rr.inheritsFrom = dt.readRoleFk AND rr.role = ?
`, [account.roleFk]
);
const oldWhere = filter.where;
const yourOwnDms = {and: [{isReadableByWorker: true}, {worker: userId}]};
filter.where = {
and: [{
const where = {
or: [yourOwnDms, {
role: {
neq: null
}
}]
}, oldWhere]};
stmt.merge(conn.makeSuffix(filter));
const workerDms = await conn.executeStmt(stmt);
};
stmt.merge(conn.makeSuffix(mergeWhere(filter.where, where)));
// Get workerDms alloweds
const dmsIds = await conn.executeStmt(stmt);
const allowedIds = dmsIds.map(dms => dms.id);
const allowedFilter = mergeFilters(filter, {where: {dmsFk: {inq: allowedIds}, workerFk: id}});
let workerDms = await models.WorkerDms.find(allowedFilter);
// Get docuware info
const docuware = await models.Docuware.findOne({
@ -63,28 +67,43 @@ module.exports = Self => {
});
const docuwareDmsType = docuware.dmsTypeFk;
let workerDocuware = [];
if (!docuwareDmsType || (docuwareDmsType && await models.DmsType.hasReadRole(ctx, docuwareDmsType))) {
if (!filter.skip && (!docuwareDmsType || (docuwareDmsType && await models.DmsType.hasReadRole(ctx, docuwareDmsType)))) {
const worker = await models.Worker.findById(id, {fields: ['fi', 'firstName', 'lastName']});
const docuwareParse = {
'Filename': 'dmsFk',
'Tipo Documento': 'description',
'Stored on': 'created',
'Document ID': 'id'
'Document ID': 'id',
'URL': 'download',
'Stored by': 'name',
'Estado': 'state'
};
workerDocuware =
await models.Docuware.getById('hr', worker.lastName + ' ' + worker.firstName, docuwareParse) ?? [];
const url = (await Self.app.models.Url.getUrl('docuware')) + 'WebClient';
for (document of workerDocuware) {
const docuwareId = document.id;
const defaultData = {
file: 'dw' + document.id + '.png',
id: docuwareId,
workerFk: id,
dmsFk: docuwareId,
dms: {
id: docuwareId,
file: docuwareId + '.pdf',
isDocuware: true,
hardCopyNumber: null,
hasFile: false,
reference: worker.fi,
dmsFk: 'DW' + document.id
dmsFk: docuwareId,
url,
description: document.description + ' - ' + document.state,
download: document.download,
created: document.created,
dmsType: {name: 'Docuware'},
worker: {id: null, user: {name: document.name}},
}
};
document = Object.assign(document, defaultData);
Object.assign(document, defaultData);
}
}
return workerDms.concat(workerDocuware);

View File

@ -2,6 +2,7 @@
vn-id="model"
url="WorkerDms/{{$ctrl.$params.id}}/filter"
link="{worker: $ctrl.$params.id}"
filter="$ctrl.filter"
limit="20"
data="$ctrl.workerDms"
order="dmsFk DESC"
@ -28,37 +29,37 @@
</vn-thead>
<vn-tbody>
<vn-tr ng-repeat="document in $ctrl.workerDms">
<vn-td number shrink>{{::document.dmsFk}}</vn-td>
<vn-td number shrink>{{::document.id}}</vn-td>
<vn-td shrink number>
<span class="chip" title="{{::document.hardCopyNumber}}"
<span class="chip" title="{{::document.dms.hardCopyNumber}}"
ng-class="{'message': document.hardCopyNumber}">
{{::document.hardCopyNumber}}
{{::document.dms.hardCopyNumber}}
</span>
</vn-td>
<vn-td expand>
<span title="{{::document.reference}}">
{{::document.reference}}
<span title="{{::document.dms.reference}}">
{{::document.dms.reference}}
</span>
</vn-td>
<vn-td expand>
<span title="{{::document.description}}">
{{::document.description}}
<span title="{{::document.dms.description}}">
{{::document.dms.description}}
</span>
</vn-td>
<vn-td shrink>
<vn-check
ng-model="document.hasFile"
ng-model="document.dms.hasFile"
disabled="true">
</vn-check>
</vn-td>
<vn-td shrink>
<span title="{{'Download file' | translate}}" class="link"
ng-click="$ctrl.downloadFile(document.dmsFk, document.isDocuware)">
{{::document.file}}
ng-click="$ctrl.downloadFile(document.dmsFk, document.dms.isDocuware)">
{{::document.dms.file}}
</span>
</vn-td>
<vn-td shrink-datetime>
{{::document.created | date:'dd/MM/yyyy HH:mm'}}
{{::document.dms.created | date:'dd/MM/yyyy HH:mm'}}
</vn-td>
<vn-td shrink>
<vn-icon-button title="{{'Download file' | translate}}"
@ -66,7 +67,7 @@
ng-click="$ctrl.downloadFile(document.dmsFk, document.isDocuware)">
</vn-icon-button>
</vn-td>
<vn-td expand ng-if="::!document.isDocuware">
<vn-td expand ng-if="::!document.dms.isDocuware">
<vn-icon-button ui-sref="worker.card.dms.edit({dmsId: {{::document.dmsFk}}})"
icon="edit"
title="{{'Edit file' | translate}}">
@ -78,7 +79,7 @@
tabindex="-1">
</vn-icon-button>
</vn-td>
<vn-td expand ng-if="::document.isDocuware">
<vn-td expand ng-if="::document.dms.isDocuware">
<vn-icon-button
icon="open_in_new"
ng-click="$ctrl.openDocuware()"

View File

@ -6,6 +6,45 @@ class Controller extends Component {
constructor($element, $, vnFile) {
super($element, $);
this.vnFile = vnFile;
this.filter = {
include: {
relation: 'dms',
scope: {
fields: [
'dmsTypeFk',
'reference',
'hardCopyNumber',
'workerFk',
'description',
'hasFile',
'file',
'created',
'companyFk',
'warehouseFk',
],
include: [
{
relation: 'dmsType',
scope: {
fields: ['name'],
},
},
{
relation: 'worker',
scope: {
fields: ['id'],
include: {
relation: 'user',
scope: {
fields: ['name'],
},
},
},
},
],
},
},
};
}
deleteDms(index) {