testToMaster #1812
|
@ -0,0 +1,133 @@
|
||||||
|
DELIMITER $$
|
||||||
|
$$
|
||||||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`ticket_canAdvance`(vDateFuture DATE, vDateToAdvance DATE, vWarehouseFk INT)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Devuelve los tickets y la cantidad de lineas de venta que se pueden adelantar.
|
||||||
|
*
|
||||||
|
* @param vDateFuture Fecha de los tickets que se quieren adelantar.
|
||||||
|
* @param vDateToAdvance Fecha a cuando se quiere adelantar.
|
||||||
|
* @param vWarehouseFk Almacén
|
||||||
|
*/
|
||||||
|
DECLARE vDateInventory DATE;
|
||||||
|
|
||||||
|
SELECT inventoried INTO vDateInventory FROM config;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.stock;
|
||||||
|
CREATE TEMPORARY TABLE tmp.stock
|
||||||
|
(itemFk INT PRIMARY KEY,
|
||||||
|
amount INT)
|
||||||
|
ENGINE = MEMORY;
|
||||||
|
|
||||||
|
INSERT INTO tmp.stock(itemFk, amount)
|
||||||
|
SELECT itemFk, SUM(quantity) amount FROM
|
||||||
|
(
|
||||||
|
SELECT itemFk, quantity
|
||||||
|
FROM itemTicketOut
|
||||||
|
WHERE shipped >= vDateInventory
|
||||||
|
AND shipped < vDateFuture
|
||||||
|
AND warehouseFk = vWarehouseFk
|
||||||
|
UNION ALL
|
||||||
|
SELECT itemFk, quantity
|
||||||
|
FROM itemEntryIn
|
||||||
|
WHERE landed >= vDateInventory
|
||||||
|
AND landed < vDateFuture
|
||||||
|
AND isVirtualStock = FALSE
|
||||||
|
AND warehouseInFk = vWarehouseFk
|
||||||
|
UNION ALL
|
||||||
|
SELECT itemFk, quantity
|
||||||
|
FROM itemEntryOut
|
||||||
|
WHERE shipped >= vDateInventory
|
||||||
|
AND shipped < vDateFuture
|
||||||
|
AND warehouseOutFk = vWarehouseFk
|
||||||
|
) t
|
||||||
|
GROUP BY itemFk HAVING amount != 0;
|
||||||
|
|
||||||
|
CREATE OR REPLACE TEMPORARY TABLE tmp.filter
|
||||||
|
(INDEX (id))
|
||||||
|
SELECT
|
||||||
|
origin.ticketFk futureId,
|
||||||
|
dest.ticketFk id,
|
||||||
|
dest.state,
|
||||||
|
origin.futureState,
|
||||||
|
origin.futureIpt,
|
||||||
|
dest.ipt,
|
||||||
|
origin.workerFk,
|
||||||
|
origin.futureLiters,
|
||||||
|
origin.futureLines,
|
||||||
|
dest.shipped,
|
||||||
|
origin.shipped futureShipped,
|
||||||
|
dest.totalWithVat,
|
||||||
|
origin.totalWithVat futureTotalWithVat,
|
||||||
|
dest.agency,
|
||||||
|
origin.futureAgency,
|
||||||
|
dest.lines,
|
||||||
|
dest.liters,
|
||||||
|
origin.futureLines - origin.hasStock AS notMovableLines,
|
||||||
|
(origin.futureLines = origin.hasStock) AS isFullMovable,
|
||||||
|
origin.futureZoneFk,
|
||||||
|
origin.futureZoneName,
|
||||||
|
origin.classColor futureClassColor,
|
||||||
|
dest.classColor
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
s.ticketFk,
|
||||||
|
c.salesPersonFk workerFk,
|
||||||
|
t.shipped,
|
||||||
|
t.totalWithVat,
|
||||||
|
st.name futureState,
|
||||||
|
t.addressFk,
|
||||||
|
am.name futureAgency,
|
||||||
|
count(s.id) futureLines,
|
||||||
|
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) futureIpt,
|
||||||
|
CAST(SUM(litros) AS DECIMAL(10,0)) futureLiters,
|
||||||
|
SUM((s.quantity <= IFNULL(st.amount,0))) hasStock,
|
||||||
|
z.id futureZoneFk,
|
||||||
|
z.name futureZoneName,
|
||||||
|
st.classColor
|
||||||
|
FROM ticket t
|
||||||
|
JOIN client c ON c.id = t.clientFk
|
||||||
|
JOIN sale s ON s.ticketFk = t.id
|
||||||
|
JOIN saleVolume sv ON sv.saleFk = s.id
|
||||||
|
JOIN item i ON i.id = s.itemFk
|
||||||
|
JOIN ticketState ts ON ts.ticketFk = t.id
|
||||||
|
JOIN state st ON st.id = ts.stateFk
|
||||||
|
JOIN agencyMode am ON t.agencyModeFk = am.id
|
||||||
|
JOIN zone z ON t.zoneFk = z.id
|
||||||
|
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
|
||||||
|
LEFT JOIN tmp.stock st ON st.itemFk = i.id
|
||||||
|
WHERE t.shipped BETWEEN vDateFuture AND util.dayend(vDateFuture)
|
||||||
|
AND t.warehouseFk = vWarehouseFk
|
||||||
|
GROUP BY t.id
|
||||||
|
) origin
|
||||||
|
JOIN (
|
||||||
|
SELECT
|
||||||
|
t.id ticketFk,
|
||||||
|
t.addressFk,
|
||||||
|
st.name state,
|
||||||
|
GROUP_CONCAT(DISTINCT ipt.code ORDER BY ipt.code) ipt,
|
||||||
|
t.shipped,
|
||||||
|
t.totalWithVat,
|
||||||
|
am.name agency,
|
||||||
|
CAST(SUM(litros) AS DECIMAL(10,0)) liters,
|
||||||
|
CAST(COUNT(*) AS DECIMAL(10,0)) `lines`,
|
||||||
|
st.classColor
|
||||||
|
FROM ticket t
|
||||||
|
JOIN sale s ON s.ticketFk = t.id
|
||||||
|
JOIN saleVolume sv ON sv.saleFk = s.id
|
||||||
|
JOIN item i ON i.id = s.itemFk
|
||||||
|
JOIN ticketState ts ON ts.ticketFk = t.id
|
||||||
|
JOIN state st ON st.id = ts.stateFk
|
||||||
|
JOIN agencyMode am ON t.agencyModeFk = am.id
|
||||||
|
LEFT JOIN itemPackingType ipt ON ipt.code = i.itemPackingTypeFk
|
||||||
|
WHERE t.shipped BETWEEN vDateToAdvance AND util.dayend(vDateToAdvance)
|
||||||
|
AND t.warehouseFk = vWarehouseFk
|
||||||
|
AND st.order <= 5
|
||||||
|
GROUP BY t.id
|
||||||
|
) dest ON dest.addressFk = origin.addressFk
|
||||||
|
WHERE origin.hasStock != 0;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tmp.stock;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
FROM debian:stretch-slim
|
FROM debian:bookworm-slim
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
ENV TZ Europe/Madrid
|
ENV TZ Europe/Madrid
|
||||||
|
|
||||||
|
|
|
@ -28,32 +28,27 @@ module.exports = Self => {
|
||||||
{
|
{
|
||||||
arg: 'ipt',
|
arg: 'ipt',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
description: 'Origin Item Packaging Type',
|
description: 'Origin Item Packaging Type'
|
||||||
required: false
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'futureIpt',
|
arg: 'futureIpt',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
description: 'Destination Item Packaging Type',
|
description: 'Destination Item Packaging Type'
|
||||||
required: false
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'id',
|
arg: 'id',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
description: 'Origin id',
|
description: 'Origin id'
|
||||||
required: false
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'futureId',
|
arg: 'futureId',
|
||||||
type: 'number',
|
type: 'number',
|
||||||
description: 'Destination id',
|
description: 'Destination id'
|
||||||
required: false
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'isFullMovable',
|
arg: 'isFullMovable',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
description: 'True when lines and stock of origin are equal',
|
description: 'True when lines and stock of origin are equal'
|
||||||
required: false
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
arg: 'filter',
|
arg: 'filter',
|
||||||
|
|
|
@ -81,6 +81,9 @@
|
||||||
<th field="futureLiters">
|
<th field="futureLiters">
|
||||||
<span translate>Liters</span>
|
<span translate>Liters</span>
|
||||||
</th>
|
</th>
|
||||||
|
<th field="futureZoneFk">
|
||||||
|
<span translate>Zone</span>
|
||||||
|
</th>
|
||||||
<th field="notMovableLines">
|
<th field="notMovableLines">
|
||||||
<span translate>Not Movable</span>
|
<span translate>Not Movable</span>
|
||||||
</th>
|
</th>
|
||||||
|
@ -155,6 +158,7 @@
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td>{{::ticket.futureLiters | dashIfEmpty}}</td>
|
<td>{{::ticket.futureLiters | dashIfEmpty}}</td>
|
||||||
|
<td>{{::ticket.futureZoneName | dashIfEmpty}}</td>
|
||||||
<td>{{::ticket.notMovableLines | dashIfEmpty}}</td>
|
<td>{{::ticket.notMovableLines | dashIfEmpty}}</td>
|
||||||
<td>{{::ticket.futureLines | dashIfEmpty}}</td>
|
<td>{{::ticket.futureLines | dashIfEmpty}}</td>
|
||||||
<td>
|
<td>
|
||||||
|
|
|
@ -15,28 +15,22 @@ export default class Controller extends Section {
|
||||||
{
|
{
|
||||||
field: 'state',
|
field: 'state',
|
||||||
searchable: false
|
searchable: false
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
field: 'futureState',
|
field: 'futureState',
|
||||||
searchable: false
|
searchable: false
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
field: 'totalWithVat',
|
field: 'totalWithVat',
|
||||||
searchable: false
|
searchable: false
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
field: 'futureTotalWithVat',
|
field: 'futureTotalWithVat',
|
||||||
searchable: false
|
searchable: false
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
field: 'shipped',
|
field: 'shipped',
|
||||||
searchable: false
|
searchable: false
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
field: 'futureShipped',
|
field: 'futureShipped',
|
||||||
searchable: false
|
searchable: false
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
field: 'ipt',
|
field: 'ipt',
|
||||||
autocomplete: {
|
autocomplete: {
|
||||||
url: 'ItemPackingTypes',
|
url: 'ItemPackingTypes',
|
||||||
|
@ -44,8 +38,7 @@ export default class Controller extends Section {
|
||||||
showField: 'description',
|
showField: 'description',
|
||||||
valueField: 'code'
|
valueField: 'code'
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
field: 'futureIpt',
|
field: 'futureIpt',
|
||||||
autocomplete: {
|
autocomplete: {
|
||||||
url: 'ItemPackingTypes',
|
url: 'ItemPackingTypes',
|
||||||
|
@ -53,6 +46,11 @@ export default class Controller extends Section {
|
||||||
showField: 'description',
|
showField: 'description',
|
||||||
valueField: 'code'
|
valueField: 'code'
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
field: 'futureZoneFk',
|
||||||
|
autocomplete: {
|
||||||
|
url: 'Zones',
|
||||||
|
}
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
@ -158,27 +156,21 @@ export default class Controller extends Section {
|
||||||
exprBuilder(param, value) {
|
exprBuilder(param, value) {
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case 'id':
|
case 'id':
|
||||||
return {'id': value};
|
|
||||||
case 'futureId':
|
case 'futureId':
|
||||||
return {'futureId': value};
|
|
||||||
case 'liters':
|
case 'liters':
|
||||||
return {'liters': value};
|
|
||||||
case 'futureLiters':
|
case 'futureLiters':
|
||||||
return {'futureLiters': value};
|
|
||||||
case 'lines':
|
case 'lines':
|
||||||
return {'lines': value};
|
|
||||||
case 'futureLines':
|
case 'futureLines':
|
||||||
return {'futureLines': value};
|
case 'totalWithVat':
|
||||||
|
case 'futureTotalWithVat':
|
||||||
|
case 'futureZone':
|
||||||
|
case 'notMovableLines':
|
||||||
|
case 'futureZoneFk':
|
||||||
|
return {[param]: value};
|
||||||
case 'ipt':
|
case 'ipt':
|
||||||
return {'ipt': {like: `%${value}%`}};
|
return {'ipt': {like: `%${value}%`}};
|
||||||
case 'futureIpt':
|
case 'futureIpt':
|
||||||
return {'futureIpt': {like: `%${value}%`}};
|
return {'futureIpt': {like: `%${value}%`}};
|
||||||
case 'totalWithVat':
|
|
||||||
return {'totalWithVat': value};
|
|
||||||
case 'futureTotalWithVat':
|
|
||||||
return {'futureTotalWithVat': value};
|
|
||||||
case 'notMovableLines':
|
|
||||||
return {'notMovableLines': value};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue