Compare commits
8 Commits
dev
...
8657-app-s
Author | SHA1 | Date |
---|---|---|
|
b660c82ffa | |
|
f2421c806a | |
|
3ed1d2e163 | |
|
acf0f82d85 | |
|
186219f057 | |
|
909b96087f | |
|
9fad296757 | |
|
75b3be8b79 |
|
@ -1,59 +0,0 @@
|
||||||
const models = require('vn-loopback/server/server').models;
|
|
||||||
|
|
||||||
describe('edi syncData()', function() {
|
|
||||||
const ediModel = models.Edi;
|
|
||||||
|
|
||||||
it('should be insert into the table', async() => {
|
|
||||||
const tx = await ediModel.beginTransaction({});
|
|
||||||
const options = {transaction: tx};
|
|
||||||
let error;
|
|
||||||
try {
|
|
||||||
await models.FloricodeConfig.create({
|
|
||||||
id: 1,
|
|
||||||
url: 'http://sample.com',
|
|
||||||
user: 'sample',
|
|
||||||
password: 'sample'
|
|
||||||
}, options);
|
|
||||||
|
|
||||||
spyOn(ediModel, 'getToken').and.returnValue(Promise.resolve('sampleToken'));
|
|
||||||
spyOn(ediModel, 'getData').and.returnValue(Promise.resolve([
|
|
||||||
{
|
|
||||||
expiry_date: '2001-01-01',
|
|
||||||
entry_date: '2001-01-01',
|
|
||||||
genus_id: 1,
|
|
||||||
latin_genus_name: 'Oasis',
|
|
||||||
change_date_time: '2001-03-15T10:30:15+01:00',
|
|
||||||
}, {
|
|
||||||
expiry_date: null,
|
|
||||||
entry_date: '2001-01-02',
|
|
||||||
genus_id: 2,
|
|
||||||
latin_genus_name: 'Ibiza',
|
|
||||||
change_date_time: '2001-02-03T18:20:42+00:00',
|
|
||||||
}
|
|
||||||
]));
|
|
||||||
|
|
||||||
await ediModel.syncData(options);
|
|
||||||
|
|
||||||
const data = await ediModel.rawSql('SELECT * FROM edi.genus', [], options);
|
|
||||||
// The table is deleted within the method itself; it will always be 2
|
|
||||||
expect(data.length).toEqual(2);
|
|
||||||
|
|
||||||
await tx.rollback();
|
|
||||||
} catch (e) {
|
|
||||||
error = e;
|
|
||||||
await tx.rollback();
|
|
||||||
}
|
|
||||||
|
|
||||||
expect(error).toBeUndefined();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should throw an error if floricode service is not configured', async function() {
|
|
||||||
let error;
|
|
||||||
try {
|
|
||||||
await ediModel.syncData();
|
|
||||||
} catch (e) {
|
|
||||||
error = e;
|
|
||||||
}
|
|
||||||
expect(error).toBeDefined();
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,93 +0,0 @@
|
||||||
const UserError = require('vn-loopback/util/user-error');
|
|
||||||
const fs = require('fs-extra');
|
|
||||||
const fastCsv = require("fast-csv");
|
|
||||||
const axios = require('axios');
|
|
||||||
const path = require('path');
|
|
||||||
const { pipeline } = require('stream/promises');
|
|
||||||
|
|
||||||
module.exports = Self => {
|
|
||||||
Self.remoteMethod('syncData', {
|
|
||||||
description: 'Sync schema data from external provider',
|
|
||||||
accessType: 'WRITE',
|
|
||||||
returns: {
|
|
||||||
type: 'object',
|
|
||||||
root: true
|
|
||||||
},
|
|
||||||
http: {
|
|
||||||
path: `/syncData`,
|
|
||||||
verb: 'POST'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Self.syncData = async options => {
|
|
||||||
const models = Self.app.models;
|
|
||||||
const myOptions = {};
|
|
||||||
if (typeof options == 'object')
|
|
||||||
Object.assign(myOptions, options);
|
|
||||||
let tx, ws;
|
|
||||||
try {
|
|
||||||
const floricodeConfig = await models.FloricodeConfig.findOne({}, myOptions);
|
|
||||||
if (!floricodeConfig) throw new UserError(`Floricode service is not configured`);
|
|
||||||
|
|
||||||
const tables = await models.TableMultiConfig.find({}, myOptions);
|
|
||||||
if (!tables?.length) throw new UserError(`No tables to sync`);
|
|
||||||
|
|
||||||
const token = await Self.getToken(floricodeConfig);
|
|
||||||
for (const table of tables) {
|
|
||||||
const data = await Self.getData(floricodeConfig.url, table.method, token);
|
|
||||||
if (!data) continue;
|
|
||||||
|
|
||||||
if (!myOptions.transaction) {
|
|
||||||
tx = await Self.beginTransaction({});
|
|
||||||
myOptions.transaction = tx;
|
|
||||||
}
|
|
||||||
|
|
||||||
await Self.rawSql(`DELETE FROM edi.??`, [table.toTable], myOptions);
|
|
||||||
ws = fs.createWriteStream(path.join(__dirname, `/${table.toTable}.csv`));
|
|
||||||
await pipeline(fastCsv.write(data, { delimiter: ';' }), ws);
|
|
||||||
const templatePath = path.join(__dirname, `./syncSql/${table.toTable}.sql`);
|
|
||||||
const sqlTemplate = await fs.readFile(templatePath, 'utf8');
|
|
||||||
await Self.rawSql(sqlTemplate, [ws.path], myOptions);
|
|
||||||
|
|
||||||
await fs.remove(ws.path);
|
|
||||||
await table.updateAttribute('updated', Date.vnNew(), myOptions);
|
|
||||||
if (tx) {
|
|
||||||
await tx.commit();
|
|
||||||
delete myOptions.transaction;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
if (tx) await tx.rollback();
|
|
||||||
if (await fs.pathExists(ws?.path))
|
|
||||||
await fs.remove(ws?.path);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Self.getToken = async function ({ url, user, password}) {
|
|
||||||
return (await axios.post(`${url}/oauth/token`, {
|
|
||||||
grant_type: 'client_credentials',
|
|
||||||
client_id: user,
|
|
||||||
client_secret: password
|
|
||||||
}, {
|
|
||||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
|
|
||||||
}
|
|
||||||
)).data.access_token;
|
|
||||||
};
|
|
||||||
|
|
||||||
Self.getData = async function (url, method, token) {
|
|
||||||
let data = [];
|
|
||||||
let count = 0;
|
|
||||||
const maxCount = (await Self.get(`${url}/v2/${method}?$count=true`, token))["@odata.count"];
|
|
||||||
while (count < maxCount) {
|
|
||||||
const response = await Self.get(`${url}/v2/${method}?$skip=${count}`, token)
|
|
||||||
data.push(...response.value);
|
|
||||||
count += response.value.length;
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
|
|
||||||
Self.get = async function get(url, token) {
|
|
||||||
return (await axios.get(url, { headers: { Authorization: `Bearer ${token}` } })).data;
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -1,14 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`bucket`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5, @col6, @col7, @col8, @col9, @col10, @col11)
|
|
||||||
SET bucket_id = @col3,
|
|
||||||
bucket_type_id = @col5,
|
|
||||||
description = @col6,
|
|
||||||
x_size = @col7,
|
|
||||||
y_size = @col8,
|
|
||||||
z_size = @col9,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col11, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,10 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`bucket_type`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5)
|
|
||||||
SET bucket_type_id = @col3,
|
|
||||||
description = @col4,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col5, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,11 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`feature`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5, @col6)
|
|
||||||
SET item_id = @col3,
|
|
||||||
feature_type_id = @col4,
|
|
||||||
feature_value = @col5,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col6, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,10 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`genus`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5)
|
|
||||||
SET genus_id = @col3,
|
|
||||||
latin_genus_name = @col4,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col5, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,14 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`item`
|
|
||||||
CHARACTER SET ascii
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5, @col6, @col7, @col8, @col9, @col10, @col11)
|
|
||||||
SET id = @col3,
|
|
||||||
product_name = @col5,
|
|
||||||
name = @col6,
|
|
||||||
plant_id = @col8,
|
|
||||||
group_id = @col10,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col11, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,12 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`item_feature`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5, @col6, @col7)
|
|
||||||
SET item_id = @col3,
|
|
||||||
feature = @col4,
|
|
||||||
regulation_type = @col5,
|
|
||||||
presentation_order = @col6,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col7, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,10 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`item_group`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5)
|
|
||||||
SET group_code = @col3,
|
|
||||||
dutch_group_description = @col4,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col5, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,11 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`plant`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5, @col6, @col7, @col8)
|
|
||||||
SET plant_id = @col4,
|
|
||||||
genus_id = @col5,
|
|
||||||
specie_id = @col6,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col8, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,11 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`specie`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5, @col6)
|
|
||||||
SET specie_id = @col3,
|
|
||||||
genus_id = @col4,
|
|
||||||
latin_species_name = @col5,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col6, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,11 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`supplier`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n'
|
|
||||||
(@col1, @col2, @col3, @col4, @col5, @col6, @col7, @col8, @col9, @col10, @col11, @col12, @col13, @col14, @col15, @col16, @col17, @col18, @col19, @col20, @col21)
|
|
||||||
SET GLNAddressCode = @col3,
|
|
||||||
supplier_id = @col9,
|
|
||||||
company_name = @col4,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col17, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,10 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`type`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n' (@col1, @col2, @col3, @col4, @col5, @col6)
|
|
||||||
SET type_id = @col3,
|
|
||||||
type_group_id = @col4,
|
|
||||||
description = @col5,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col6, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -1,10 +0,0 @@
|
||||||
LOAD DATA LOCAL INFILE ?
|
|
||||||
INTO TABLE `edi`.`value`
|
|
||||||
FIELDS TERMINATED BY ';'
|
|
||||||
LINES TERMINATED BY '\n' (@col1, @col2, @col3, @col4, @col5, @col6)
|
|
||||||
SET type_id = @col3,
|
|
||||||
type_value = @col4,
|
|
||||||
type_description = @col5,
|
|
||||||
entry_date = STR_TO_DATE(@col2, '%Y-%m-%d'),
|
|
||||||
expiry_date = STR_TO_DATE(@col1, '%Y-%m-%d'),
|
|
||||||
change_date_time = STR_TO_DATE(REGEXP_REPLACE(@col6, '\\+.*$', ''), '%Y-%m-%dT%H:%i:%s')
|
|
|
@ -70,9 +70,6 @@
|
||||||
"Expedition_PrintOut": {
|
"Expedition_PrintOut": {
|
||||||
"dataSource": "vn"
|
"dataSource": "vn"
|
||||||
},
|
},
|
||||||
"FloricodeConfig": {
|
|
||||||
"dataSource": "vn"
|
|
||||||
},
|
|
||||||
"Image": {
|
"Image": {
|
||||||
"dataSource": "vn"
|
"dataSource": "vn"
|
||||||
},
|
},
|
||||||
|
@ -157,9 +154,6 @@
|
||||||
"SaySimpleConfig": {
|
"SaySimpleConfig": {
|
||||||
"dataSource": "vn"
|
"dataSource": "vn"
|
||||||
},
|
},
|
||||||
"TableMultiConfig": {
|
|
||||||
"dataSource": "vn"
|
|
||||||
},
|
|
||||||
"TempContainer": {
|
"TempContainer": {
|
||||||
"dataSource": "tempStorage"
|
"dataSource": "tempStorage"
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
require('../methods/edi/updateData')(Self);
|
require('../methods/edi/updateData')(Self);
|
||||||
require('../methods/edi/syncData')(Self);
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
"name": "FloricodeConfig",
|
|
||||||
"base": "VnModel",
|
|
||||||
"options": {
|
|
||||||
"mysql": {
|
|
||||||
"table": "edi.floricodeConfig"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "number",
|
|
||||||
"id": true,
|
|
||||||
"required": true
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"required": true
|
|
||||||
},
|
|
||||||
"user": {
|
|
||||||
"type": "string",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"password": {
|
|
||||||
"type": "string",
|
|
||||||
"required": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
{
|
|
||||||
"name": "TableMultiConfig",
|
|
||||||
"base": "VnModel",
|
|
||||||
"options": {
|
|
||||||
"mysql": {
|
|
||||||
"table": "edi.tableMultiConfig"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "number",
|
|
||||||
"required": true
|
|
||||||
},
|
|
||||||
"toTable": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"method": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"updated": {
|
|
||||||
"type": "date"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -17,7 +17,7 @@ async function init() {
|
||||||
});
|
});
|
||||||
// FIXME: Workaround to wait for loopback to be ready
|
// FIXME: Workaround to wait for loopback to be ready
|
||||||
app.emit('started');
|
app.emit('started');
|
||||||
await app.models.Application.status();
|
await getStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function deinit() {
|
async function deinit() {
|
||||||
|
@ -33,3 +33,20 @@ module.exports = {
|
||||||
if (require.main === module)
|
if (require.main === module)
|
||||||
init();
|
init();
|
||||||
|
|
||||||
|
async function getStatus() {
|
||||||
|
const MAX_ATTEMPTS = 10;
|
||||||
|
let attempts = 0;
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const intervalo = setInterval(async() => {
|
||||||
|
try {
|
||||||
|
const resultado = await app.models.Application.status();
|
||||||
|
clearInterval(intervalo);
|
||||||
|
resolve(resultado);
|
||||||
|
} catch (error) {
|
||||||
|
console.log('Attempt to connect ' + attempts + '/' + MAX_ATTEMPTS);
|
||||||
|
if (attempts >= MAX_ATTEMPTS)reject(error);
|
||||||
|
}
|
||||||
|
attempts++;
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -16,8 +16,8 @@ INSERT INTO vn.entryConfig (defaultEntry, mailToNotify, inventorySupplierFk, max
|
||||||
*/
|
*/
|
||||||
-- XXX: eti
|
-- XXX: eti
|
||||||
|
|
||||||
INSERT INTO vn.travel (id,shipped,landed,availabled,warehouseInFk,warehouseOutFk,`ref`,m3,kg,cargoSupplierFk)
|
INSERT INTO vn.travel (id,shipped,landed,warehouseInFk,warehouseOutFk,`ref`,m3,kg,cargoSupplierFk)
|
||||||
VALUES (9,'2022-05-20','2022-05-20','2022-05-20',13,4,'nine travel',69.0,600,1);
|
VALUES (9,'2022-05-20','2022-05-20',13,4,'nine travel',69.0,600,1);
|
||||||
/* #5483
|
/* #5483
|
||||||
INSERT INTO vn.entry (id, supplierFk, dated, invoiceNumber, evaNotes, travelFk, companyFk)
|
INSERT INTO vn.entry (id, supplierFk, dated, invoiceNumber, evaNotes, travelFk, companyFk)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -278,15 +278,6 @@ INSERT INTO `hedera`.`tpvConfig` (currency, terminal, transactionType, maxAmount
|
||||||
INSERT INTO hedera.tpvMerchantEnable (merchantFk, companyFk)
|
INSERT INTO hedera.tpvMerchantEnable (merchantFk, companyFk)
|
||||||
VALUES (1, 442);
|
VALUES (1, 442);
|
||||||
|
|
||||||
/* UPDATE vn.ticket t
|
|
||||||
JOIN vn.zone z ON z.id = t.zoneFk
|
|
||||||
SET t.shipped = DATE(t.shipped) +
|
|
||||||
INTERVAL HOUR(z.hour) HOUR +
|
|
||||||
INTERVAL MINUTE(z.hour) MINUTE;
|
|
||||||
*/
|
|
||||||
UPDATE vn.travel
|
|
||||||
SET availabled = landed
|
|
||||||
WHERE availabled IS NULL;
|
|
||||||
-- XXX
|
-- XXX
|
||||||
|
|
||||||
SET foreign_key_checks = 1;
|
SET foreign_key_checks = 1;
|
||||||
|
|
|
@ -854,8 +854,7 @@ INSERT INTO `vn`.`ticketTracking`(`ticketFk`, `stateFk`, `userFk`, `created`)
|
||||||
|
|
||||||
INSERT INTO `vn`.`deliveryPoint` (`id`, `name`, `ubication`)
|
INSERT INTO `vn`.`deliveryPoint` (`id`, `name`, `ubication`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'Gotham','1007 Mountain Drive, Gotham'),
|
(1, 'Gotham','1007 Mountain Drive, Gotham');
|
||||||
(6, 'Stark Tower','200 Park Avenue, Nueva York');
|
|
||||||
|
|
||||||
INSERT INTO `vn`.`vehicle`(`id`, `numberPlate`, `tradeMark`, `model`, `companyFk`, `warehouseFk`, `description`, `m3`, `isActive`, `deliveryPointFk`, `chassis`, `leasing`, `supplierFk`, `fuelTypeFk`, `bankPolicyFk`)
|
INSERT INTO `vn`.`vehicle`(`id`, `numberPlate`, `tradeMark`, `model`, `companyFk`, `warehouseFk`, `description`, `m3`, `isActive`, `deliveryPointFk`, `chassis`, `leasing`, `supplierFk`, `fuelTypeFk`, `bankPolicyFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -1537,20 +1536,20 @@ INSERT INTO `vn`.`awb` (id, code, package, weight, created, amount, transitoryFk
|
||||||
(9, '99610289193', 302, 2972, util.VN_CURDATE(), 3871, 442, 1),
|
(9, '99610289193', 302, 2972, util.VN_CURDATE(), 3871, 442, 1),
|
||||||
(10, '07546500856', 185, 2364, util.VN_CURDATE(), 5321, 442, 1);
|
(10, '07546500856', 185, 2364, util.VN_CURDATE(), 5321, 442, 1);
|
||||||
|
|
||||||
INSERT INTO `vn`.`travel`(`id`,`shipped`, `landed`, `availabled`,`warehouseInFk`, `warehouseOutFk`, `agencyModeFk`, `m3`, `kg`,`ref`, `totalEntries`, `cargoSupplierFk`, `awbFK`, `isRaid`, `daysInForward`)
|
INSERT INTO `vn`.`travel`(`id`,`shipped`, `landed`, `warehouseInFk`, `warehouseOutFk`, `agencyModeFk`, `m3`, `kg`,`ref`, `totalEntries`, `cargoSupplierFk`, `awbFK`, `isRaid`, `daysInForward`)
|
||||||
VALUES (1, DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), 1, 2, 1, 100.00, 1000, 'first travel', 1, 1, 1, FALSE, NULL),
|
VALUES (1, DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -2 MONTH), 1, 2, 1, 100.00, 1000, 'first travel', 1, 1, 1, FALSE, NULL),
|
||||||
(2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1, 2, 1, 150.00, 2000, 'second travel', 2, 2, 2, FALSE, NULL),
|
(2, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1, 2, 1, 150.00, 2000, 'second travel', 2, 2, 2, FALSE, NULL),
|
||||||
(3, util.VN_CURDATE(), util.VN_CURDATE(), util.VN_CURDATE(), 1, 2, 1, 0.00, 0.00, 'third travel', 1, 1, 3, FALSE, NULL),
|
(3, util.VN_CURDATE(), util.VN_CURDATE(), 1, 2, 1, 0.00, 0.00, 'third travel', 1, 1, 3, FALSE, NULL),
|
||||||
(4, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1, 3, 1, 50.00, 500, 'fourth travel', 0, 2, 4, FALSE, NULL),
|
(4, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 1, 3, 1, 50.00, 500, 'fourth travel', 0, 2, 4, FALSE, NULL),
|
||||||
(5, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 3, 3, 1, 50.00, 500, 'fifth travel', 1, 1, 5, FALSE, NULL),
|
(5, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 3, 3, 1, 50.00, 500, 'fifth travel', 1, 1, 5, FALSE, NULL),
|
||||||
(6, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 4, 4, 1, 50.00, 500, 'sixth travel', 1, 2, 6, FALSE,NULL),
|
(6, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 4, 4, 1, 50.00, 500, 'sixth travel', 1, 2, 6, FALSE,NULL),
|
||||||
(7, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 4, 1, 50.00, 500, 'seventh travel', 2, 1, 7, TRUE, 2),
|
(7, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 4, 1, 50.00, 500, 'seventh travel', 2, 1, 7, TRUE, 2),
|
||||||
(8, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 1, 1, 50.00, 500, 'eight travel', 1, 2, 10, FALSE, NULL),
|
(8, DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), DATE_ADD(util.VN_CURDATE(), INTERVAL -1 MONTH), 5, 1, 1, 50.00, 500, 'eight travel', 1, 2, 10, FALSE, NULL),
|
||||||
(10, DATE_ADD(util.VN_CURDATE(), INTERVAL +5 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL +5 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL +5 DAY), 5, 1, 1, 50.00, 500, 'nineth travel', 1, 2, 10, TRUE, 2),
|
(10, DATE_ADD(util.VN_CURDATE(), INTERVAL +5 DAY), DATE_ADD(util.VN_CURDATE(), INTERVAL +5 DAY), 5, 1, 1, 50.00, 500, 'nineth travel', 1, 2, 10, TRUE, 2),
|
||||||
(11, util.VN_CURDATE() - INTERVAL 1 DAY , util.VN_CURDATE(), util.VN_CURDATE(), 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL),
|
(11, util.VN_CURDATE() - INTERVAL 1 DAY , util.VN_CURDATE(), 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL),
|
||||||
(12, util.VN_CURDATE() , util.VN_CURDATE() + INTERVAL 1 DAY, util.VN_CURDATE() + INTERVAL 1 DAY, 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL),
|
(12, util.VN_CURDATE() , util.VN_CURDATE() + INTERVAL 1 DAY, 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL),
|
||||||
(13, util.VN_CURDATE() - INTERVAL 1 MONTH - INTERVAL 1 DAY, util.VN_CURDATE() - INTERVAL 1 MONTH, util.VN_CURDATE() - INTERVAL 1 MONTH, 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL),
|
(13, util.VN_CURDATE() - INTERVAL 1 MONTH - INTERVAL 1 DAY, util.VN_CURDATE() - INTERVAL 1 MONTH, 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL),
|
||||||
(14, util.VN_CURDATE() - INTERVAL 1 DAY , util.VN_CURDATE() + INTERVAL 1 DAY,util.VN_CURDATE() + INTERVAL 1 DAY, 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL);
|
(14, util.VN_CURDATE() - INTERVAL 1 DAY , util.VN_CURDATE() + INTERVAL 1 DAY, 6, 3, 0, 50.00, 500, 'eleventh travel', 1, 2, 4, FALSE, NULL);
|
||||||
|
|
||||||
INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed`, `companyFk`, `invoiceNumber`, `reference`, `isExcludedFromAvailable`, `evaNotes`, `typeFk`)
|
INSERT INTO `vn`.`entry`(`id`, `supplierFk`, `created`, `travelFk`, `isConfirmed`, `companyFk`, `invoiceNumber`, `reference`, `isExcludedFromAvailable`, `evaNotes`, `typeFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -2833,18 +2832,12 @@ INSERT INTO `bs`.`defaulter` (`clientFk`, `amount`, `created`, `defaulterSinced`
|
||||||
(1109, 500, util.VN_CURDATE(), util.VN_CURDATE());
|
(1109, 500, util.VN_CURDATE(), util.VN_CURDATE());
|
||||||
|
|
||||||
UPDATE `vn`.`route`
|
UPDATE `vn`.`route`
|
||||||
SET
|
SET `invoiceInFk`=1
|
||||||
`invoiceInFk` = 1,
|
WHERE `id`=1;
|
||||||
`kmStart` = 0,
|
|
||||||
`kmEnd` = 0
|
|
||||||
WHERE `id` = 1;
|
|
||||||
|
|
||||||
UPDATE `vn`.`route`
|
UPDATE `vn`.`route`
|
||||||
SET
|
SET `invoiceInFk`=2
|
||||||
`invoiceInFk` = 2,
|
WHERE `id`=2;
|
||||||
`kmStart` = 0,
|
|
||||||
`kmEnd` = 0
|
|
||||||
WHERE `id` = 2;
|
|
||||||
|
|
||||||
INSERT INTO `bs`.`sale` (`saleFk`, `amount`, `dated`, `typeFk`, `clientFk`)
|
INSERT INTO `bs`.`sale` (`saleFk`, `amount`, `dated`, `typeFk`, `clientFk`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -3338,7 +3331,6 @@ INSERT IGNORE INTO vn.itemType
|
||||||
INSERT IGNORE INTO vn.travel
|
INSERT IGNORE INTO vn.travel
|
||||||
SET id = 99,
|
SET id = 99,
|
||||||
shipped = CURDATE(),
|
shipped = CURDATE(),
|
||||||
availabled = CURDATE(),
|
|
||||||
landed = CURDATE(),
|
landed = CURDATE(),
|
||||||
warehouseInFk = 999,
|
warehouseInFk = 999,
|
||||||
warehouseOutFk = 1,
|
warehouseOutFk = 1,
|
||||||
|
@ -4155,8 +4147,5 @@ INSERT IGNORE INTO vn.vehicleType (id, name)
|
||||||
(3, 'cabeza tractora'),
|
(3, 'cabeza tractora'),
|
||||||
(4, 'remolque');
|
(4, 'remolque');
|
||||||
|
|
||||||
INSERT INTO edi.tableMultiConfig (fileName, toTable, file, `method`, updated)
|
|
||||||
VALUES ('FG', 'genus', 'florecompc2', 'VBN/Genus', '2001-01-01');
|
|
||||||
|
|
||||||
INSERT INTO vn.addressWaste (addressFk, type)
|
INSERT INTO vn.addressWaste (addressFk, type)
|
||||||
VALUES (11, 'fault');
|
VALUES (11, 'fault');
|
||||||
|
|
|
@ -6,15 +6,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `cache`.`available_refresh`
|
||||||
`vAvailabled` DATETIME
|
`vAvailabled` DATETIME
|
||||||
)
|
)
|
||||||
proc: BEGIN
|
proc: BEGIN
|
||||||
/**
|
DECLARE vStartDate DATE;
|
||||||
* Calculates the availability of all items by warehouse and date
|
|
||||||
*
|
|
||||||
* @param vCalc Returns cache.cache_calc.id
|
|
||||||
* @param vRefresh Forces the calculation
|
|
||||||
* @param vWarehouse vn.warehouse.id
|
|
||||||
* @param vAvailabled Moment in time for required availability
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
DECLARE vReserveDate DATETIME;
|
DECLARE vReserveDate DATETIME;
|
||||||
DECLARE vParams CHAR(100);
|
DECLARE vParams CHAR(100);
|
||||||
DECLARE vInventoryDate DATE;
|
DECLARE vInventoryDate DATE;
|
||||||
|
@ -36,7 +28,7 @@ proc: BEGIN
|
||||||
|
|
||||||
SET vAvailabled = vDated + INTERVAL HOUR(vAvailabled) HOUR;
|
SET vAvailabled = vDated + INTERVAL HOUR(vAvailabled) HOUR;
|
||||||
|
|
||||||
CALL vn.item_getStock(vWarehouse, vAvailabled, NULL);
|
CALL vn.item_getStock(vWarehouse, vDated, NULL);
|
||||||
|
|
||||||
SET vParams = CONCAT_WS('/', vWarehouse, vAvailabled);
|
SET vParams = CONCAT_WS('/', vWarehouse, vAvailabled);
|
||||||
CALL cache_calc_start (vCalc, vRefresh, 'available', vParams);
|
CALL cache_calc_start (vCalc, vRefresh, 'available', vParams);
|
||||||
|
@ -46,16 +38,10 @@ proc: BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- Calcula algunos parámetros necesarios
|
-- Calcula algunos parámetros necesarios
|
||||||
SELECT inventoried
|
SET vStartDate = TIMESTAMP(vDated, '00:00:00');
|
||||||
INTO vInventoryDate
|
SELECT inventoried INTO vInventoryDate FROM vn.config;
|
||||||
FROM vn.config;
|
SELECT DATE_SUB(vStartDate, INTERVAL MAX(life) DAY) INTO vLifeScope FROM vn.itemType;
|
||||||
|
SELECT SUBTIME(util.VN_NOW(), reserveTime) INTO vReserveDate
|
||||||
SELECT DATE_SUB(vDated, INTERVAL MAX(life) DAY)
|
|
||||||
INTO vLifeScope
|
|
||||||
FROM vn.itemType;
|
|
||||||
|
|
||||||
SELECT SUBTIME(util.VN_NOW(), reserveTime)
|
|
||||||
INTO vReserveDate
|
|
||||||
FROM hedera.orderConfig;
|
FROM hedera.orderConfig;
|
||||||
|
|
||||||
SELECT w.id INTO vWarehouseFkInventory
|
SELECT w.id INTO vWarehouseFkInventory
|
||||||
|
@ -63,22 +49,22 @@ proc: BEGIN
|
||||||
WHERE w.code = 'inv';
|
WHERE w.code = 'inv';
|
||||||
|
|
||||||
-- Calcula el ultimo dia de vida para cada producto
|
-- Calcula el ultimo dia de vida para cada producto
|
||||||
CREATE OR REPLACE TEMPORARY TABLE itemRange
|
DROP TEMPORARY TABLE IF EXISTS itemRange;
|
||||||
|
CREATE TEMPORARY TABLE itemRange
|
||||||
(PRIMARY KEY (itemFk))
|
(PRIMARY KEY (itemFk))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT i.id itemFk,
|
SELECT i.id itemFk,
|
||||||
util.dayEnd(DATE_ADD(c.maxLanded, INTERVAL it.life DAY)) ended,
|
util.dayEnd(DATE_ADD(c.maxLanded, INTERVAL it.life DAY)) ended, it.life
|
||||||
it.life
|
|
||||||
FROM vn.item i
|
FROM vn.item i
|
||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
SELECT b.itemFk, MAX(t.availabled) maxLanded
|
SELECT b.itemFk, MAX(t.landed) maxLanded
|
||||||
FROM vn.buy b
|
FROM vn.buy b
|
||||||
JOIN vn.entry e ON b.entryFk = e.id
|
JOIN vn.entry e ON b.entryFk = e.id
|
||||||
JOIN vn.travel t ON t.id = e.travelFk
|
JOIN vn.travel t ON t.id = e.travelFk
|
||||||
JOIN vn.warehouse w ON w.id = t.warehouseInFk
|
JOIN vn.warehouse w ON w.id = t.warehouseInFk
|
||||||
JOIN vn.item i ON i.id = b.itemFk
|
JOIN vn.item i ON i.id = b.itemFk
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
WHERE t.landed BETWEEN vLifeScope AND vDated
|
WHERE t.landed BETWEEN vLifeScope AND vStartDate
|
||||||
AND t.warehouseInFk = vWarehouse
|
AND t.warehouseInFk = vWarehouse
|
||||||
AND t.warehouseOutFk <> vWarehouseFkInventory
|
AND t.warehouseOutFk <> vWarehouseFkInventory
|
||||||
AND it.life
|
AND it.life
|
||||||
|
@ -86,78 +72,62 @@ proc: BEGIN
|
||||||
GROUP BY b.itemFk
|
GROUP BY b.itemFk
|
||||||
) c ON i.id = c.itemFk
|
) c ON i.id = c.itemFk
|
||||||
JOIN vn.itemType it ON it.id = i.typeFk
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
HAVING ended >= vDated OR life IS NULL;
|
HAVING ended >= vStartDate OR life IS NULL;
|
||||||
|
|
||||||
-- Calcula el ATP (Available to Promise)
|
-- Calcula el ATP
|
||||||
DELETE FROM available WHERE calc_id = vCalc;
|
DELETE FROM available WHERE calc_id = vCalc;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
|
DROP TEMPORARY TABLE IF EXISTS tmp.itemCalc;
|
||||||
|
CREATE TEMPORARY TABLE tmp.itemCalc
|
||||||
(INDEX (itemFk,warehouseFk))
|
(INDEX (itemFk,warehouseFk))
|
||||||
ENGINE = MEMORY
|
ENGINE = MEMORY
|
||||||
SELECT itemFk,
|
SELECT itemFk, vWarehouse warehouseFk, DATE(dated) dated, SUM(quantity) quantity
|
||||||
vWarehouse warehouseFk,
|
FROM (SELECT i.itemFk, i.shipped dated, i.quantity
|
||||||
dated,
|
|
||||||
SUM(quantity) quantity
|
|
||||||
FROM (
|
|
||||||
SELECT i.itemFk,
|
|
||||||
i.shipped dated,
|
|
||||||
i.quantity
|
|
||||||
FROM vn.itemTicketOut i
|
FROM vn.itemTicketOut i
|
||||||
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
||||||
WHERE i.shipped >= vAvailabled
|
WHERE i.shipped >= vStartDate
|
||||||
AND (ir.ended IS NULL
|
AND (ir.ended IS NULL OR i.shipped <= ir.ended)
|
||||||
OR i.shipped <= ir.ended)
|
|
||||||
AND i.warehouseFk = vWarehouse
|
AND i.warehouseFk = vWarehouse
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT i.itemFk,
|
SELECT i.itemFk, IFNULL(i.availabled, i.landed), i.quantity
|
||||||
i.availabled,
|
|
||||||
i.quantity
|
|
||||||
FROM vn.itemEntryIn i
|
FROM vn.itemEntryIn i
|
||||||
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
||||||
WHERE i.availabled >= vAvailabled
|
LEFT JOIN edi.warehouseFloramondo wf ON wf.entryFk = i.entryFk
|
||||||
AND (ir.ended IS NULL
|
WHERE IFNULL(i.availabled, i.landed) >= vStartDate
|
||||||
OR i.availabled <= ir.ended)
|
AND IFNULL(i.availabled, i.landed) <= vAvailabled
|
||||||
|
AND (ir.ended IS NULL OR IFNULL(i.availabled, i.landed) <= ir.ended)
|
||||||
AND i.warehouseInFk = vWarehouse
|
AND i.warehouseInFk = vWarehouse
|
||||||
|
AND wf.entryFk IS NULL
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT i.itemFk,
|
SELECT i.itemFk, i.shipped, i.quantity
|
||||||
i.shipped,
|
|
||||||
i.quantity
|
|
||||||
FROM vn.itemEntryOut i
|
FROM vn.itemEntryOut i
|
||||||
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
JOIN itemRange ir ON ir.itemFk = i.itemFk
|
||||||
WHERE i.shipped >= vAvailabled
|
WHERE i.shipped >= vStartDate
|
||||||
AND (ir.ended IS NULL
|
AND (ir.ended IS NULL OR i.shipped <= ir.ended)
|
||||||
OR i.shipped <= ir.ended)
|
|
||||||
AND i.warehouseOutFk = vWarehouse
|
AND i.warehouseOutFk = vWarehouse
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT r.item_id,
|
SELECT r.item_id, r.shipment, -r.amount
|
||||||
r.shipment,
|
|
||||||
-r.amount
|
|
||||||
FROM hedera.order_row r
|
FROM hedera.order_row r
|
||||||
JOIN hedera.`order` o ON o.id = r.order_id
|
JOIN hedera.`order` o ON o.id = r.order_id
|
||||||
JOIN itemRange ir ON ir.itemFk = r.item_id
|
JOIN itemRange ir ON ir.itemFk = r.item_id
|
||||||
WHERE r.shipment >= vDated
|
WHERE r.shipment >= vStartDate
|
||||||
AND (ir.ended IS NULL
|
AND (ir.ended IS NULL OR r.shipment <= ir.ended)
|
||||||
OR r.shipment <= ir.ended)
|
|
||||||
AND r.warehouse_id = vWarehouse
|
AND r.warehouse_id = vWarehouse
|
||||||
AND r.created >= vReserveDate
|
AND r.created >= vReserveDate
|
||||||
AND NOT o.confirmed
|
AND NOT o.confirmed
|
||||||
) t
|
) t
|
||||||
GROUP BY itemFk, dated;
|
GROUP BY itemFk, dated;
|
||||||
|
|
||||||
CALL vn.item_getAtp(vAvailabled);
|
CALL vn.item_getAtp(vDated);
|
||||||
|
|
||||||
INSERT INTO available (calc_id, item_id, available)
|
INSERT INTO available (calc_id, item_id, available)
|
||||||
SELECT vCalc,
|
SELECT vCalc, sub.itemFk, SUM(sub.quantity)
|
||||||
sub.itemFk,
|
|
||||||
SUM(sub.quantity)
|
|
||||||
FROM (
|
FROM (
|
||||||
SELECT ir.itemFk,
|
SELECT ir.itemFk, stock quantity
|
||||||
stock quantity
|
|
||||||
FROM tmp.itemList il
|
FROM tmp.itemList il
|
||||||
JOIN itemRange ir ON ir.itemFk = il.itemFk
|
JOIN itemRange ir ON ir.itemFk = il.itemFk
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT itemFk,
|
SELECT itemFk, quantity
|
||||||
quantity
|
|
||||||
FROM tmp.itemAtp
|
FROM tmp.itemAtp
|
||||||
)sub
|
)sub
|
||||||
GROUP BY sub.itemFk;
|
GROUP BY sub.itemFk;
|
||||||
|
|
|
@ -2,7 +2,7 @@ DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `cache`.`stock_refresh`(v_refresh BOOL)
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `cache`.`stock_refresh`(v_refresh BOOL)
|
||||||
proc: BEGIN
|
proc: BEGIN
|
||||||
/**
|
/**
|
||||||
* Crea o actualiza la cache con el disponible hasta el día de
|
* Crea o actualiza la cache con el disponible hasta el día de
|
||||||
* ayer. Esta cache es usada como base para otros procedimientos
|
* ayer. Esta cache es usada como base para otros procedimientos
|
||||||
* como el cálculo del visible o del ATP.
|
* como el cálculo del visible o del ATP.
|
||||||
*
|
*
|
||||||
|
@ -36,19 +36,15 @@ proc: BEGIN
|
||||||
(
|
(
|
||||||
SELECT itemFk AS item_id, warehouseFk AS warehouse_id, quantity AS amount
|
SELECT itemFk AS item_id, warehouseFk AS warehouse_id, quantity AS amount
|
||||||
FROM vn.itemTicketOut
|
FROM vn.itemTicketOut
|
||||||
WHERE shipped >= v_date_inv
|
WHERE shipped >= v_date_inv AND shipped < vCURDATE
|
||||||
AND shipped < vCURDATE
|
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT itemFk ASitem_id, warehouseInFk AS warehouse_id, quantity AS amount
|
SELECT itemFk ASitem_id, warehouseInFk AS warehouse_id, quantity AS amount
|
||||||
FROM vn.itemEntryIn
|
FROM vn.itemEntryIn
|
||||||
WHERE availabled >= v_date_inv
|
WHERE landed >= v_date_inv AND landed < vCURDATE AND isVirtualStock is FALSE
|
||||||
AND availabled < vCURDATE
|
|
||||||
AND isVirtualStock is FALSE
|
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT itemFk AS item_id ,warehouseOutFk AS warehouse_id, quantity AS amount
|
SELECT itemFk AS item_id ,warehouseOutFk AS warehouse_id, quantity AS amount
|
||||||
FROM vn.itemEntryOut
|
FROM vn.itemEntryOut
|
||||||
WHERE shipped >= v_date_inv
|
WHERE shipped >= v_date_inv AND shipped < vCURDATE
|
||||||
AND shipped < vCURDATE
|
|
||||||
) t
|
) t
|
||||||
GROUP BY item_id, warehouse_id HAVING amount != 0;
|
GROUP BY item_id, warehouse_id HAVING amount != 0;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `stock`.`log_clean`
|
||||||
|
ON SCHEDULE EVERY 1 DAY
|
||||||
|
STARTS '2022-01-28 09:29:18.000'
|
||||||
|
ON COMPLETION PRESERVE
|
||||||
|
ENABLE
|
||||||
|
DO CALL log_clean$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,8 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `stock`.`log_syncNoWait`
|
||||||
|
ON SCHEDULE EVERY 5 SECOND
|
||||||
|
STARTS '2017-06-27 17:15:02.000'
|
||||||
|
ON COMPLETION NOT PRESERVE
|
||||||
|
DISABLE
|
||||||
|
DO CALL log_syncNoWait$$
|
||||||
|
DELIMITER ;
|
|
@ -1,8 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `stock`.`stock_clean`
|
|
||||||
ON SCHEDULE EVERY 60 SECOND
|
|
||||||
STARTS '2025-01-01 00:00:00.000'
|
|
||||||
ON COMPLETION PRESERVE
|
|
||||||
ENABLE
|
|
||||||
DO CALL stock_clean$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,8 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` EVENT `stock`.`stock_sync`
|
|
||||||
ON SCHEDULE EVERY 5 SECOND
|
|
||||||
STARTS '2025-01-01 00:00:00.000'
|
|
||||||
ON COMPLETION PRESERVE
|
|
||||||
DISABLE
|
|
||||||
DO CALL stock_sync$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,91 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyLot_refresh`(
|
|
||||||
`vTable` ENUM('lot', 'entry', 'travel'),
|
|
||||||
`vId` INT)
|
|
||||||
BEGIN
|
|
||||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
||||||
BEGIN
|
|
||||||
ROLLBACK;
|
|
||||||
RESIGNAL;
|
|
||||||
END;
|
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tBuyAlive
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT
|
|
||||||
t.id travelFk,
|
|
||||||
t.landed,
|
|
||||||
t.landingHour,
|
|
||||||
t.warehouseInFk,
|
|
||||||
t.isReceived,
|
|
||||||
t.isRaid,
|
|
||||||
e.id entryFk,
|
|
||||||
b.lotFk,
|
|
||||||
b.itemFk,
|
|
||||||
b.life,
|
|
||||||
b.quantity
|
|
||||||
FROM tLotStatus ls
|
|
||||||
JOIN vn.buy b ON b.lotFk = ls.lotFk
|
|
||||||
JOIN vn.entry e ON e.id = b.entryFk
|
|
||||||
JOIN vn.travel t ON t.id = e.travelFk
|
|
||||||
WHERE ls.isIncluded;
|
|
||||||
|
|
||||||
START TRANSACTION;
|
|
||||||
|
|
||||||
-- Delete excluded/deleted/dead lots
|
|
||||||
|
|
||||||
DELETE l FROM buyLot l
|
|
||||||
JOIN tLotStatus ls USING(lotFk)
|
|
||||||
WHERE NOT ls.isIncluded;
|
|
||||||
|
|
||||||
-- Delete undead lot picks
|
|
||||||
|
|
||||||
UPDATE buyOut o
|
|
||||||
JOIN buyPick p ON p.outFk = o.outFk
|
|
||||||
JOIN tLotStatus ls ON ls.lotFk = p.lotFk
|
|
||||||
SET o.isSync = FALSE,
|
|
||||||
o.lack = o.lack + p.quantity
|
|
||||||
WHERE ls.isExcluded OR ls.isIncluded;
|
|
||||||
|
|
||||||
DELETE p FROM buyPick p
|
|
||||||
JOIN tLotStatus ls USING(lotFk)
|
|
||||||
WHERE ls.isExcluded OR ls.isIncluded;
|
|
||||||
|
|
||||||
-- Update alive outs
|
|
||||||
|
|
||||||
INSERT INTO buyLot (
|
|
||||||
lotFk,
|
|
||||||
isSync,
|
|
||||||
isPicked,
|
|
||||||
warehouseFk,
|
|
||||||
itemFk,
|
|
||||||
dated,
|
|
||||||
expired,
|
|
||||||
quantity,
|
|
||||||
available
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
lotFk,
|
|
||||||
FALSE,
|
|
||||||
isReceived,
|
|
||||||
warehouseInFk,
|
|
||||||
itemFk,
|
|
||||||
@dated := ADDTIME(landed, IFNULL(landingHour, '00:00:00')),
|
|
||||||
@dated + INTERVAL life DAY,
|
|
||||||
quantity,
|
|
||||||
NULL
|
|
||||||
FROM tBuyAlive
|
|
||||||
ON DUPLICATE KEY UPDATE
|
|
||||||
isSync = VALUES(isSync),
|
|
||||||
isPicked = VALUES(isPicked),
|
|
||||||
warehouseFk = VALUES(warehouseFk),
|
|
||||||
itemFk = VALUES(itemFk),
|
|
||||||
dated = VALUES(dated),
|
|
||||||
expired = VALUES(expired),
|
|
||||||
quantity = VALUES(quantity),
|
|
||||||
available = VALUES(available);
|
|
||||||
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tBuyAlive;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,64 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyLot_requestQuantity`(
|
|
||||||
vSelf INT,
|
|
||||||
vRequested INT,
|
|
||||||
vDated DATETIME,
|
|
||||||
vOutFk INT,
|
|
||||||
OUT vSupplied INT)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Disassociates lot picks after the given date until the demanded quantity is
|
|
||||||
* satisfied.
|
|
||||||
*
|
|
||||||
* @param vSelf The buyLot reference
|
|
||||||
* @param vRequested The requested quantity
|
|
||||||
* @param vDate The starting date for the associated outs
|
|
||||||
* @param vOutFk The if of requesting out
|
|
||||||
* @param vSupplied The supplied quantity
|
|
||||||
*/
|
|
||||||
DECLARE vPickFk INT;
|
|
||||||
DECLARE vPickOutFk INT;
|
|
||||||
DECLARE vPickQuantity INT;
|
|
||||||
DECLARE vPickGranted INT;
|
|
||||||
DECLARE vDone BOOL;
|
|
||||||
|
|
||||||
DECLARE vPicks CURSOR FOR
|
|
||||||
SELECT p.id, o.outFk, p.quantity
|
|
||||||
FROM buyPick p
|
|
||||||
JOIN buyOut o USING(outFk)
|
|
||||||
WHERE p.lotFk = vSelf
|
|
||||||
AND (o.dated, o.outFk) > (vDated, vOutFk)
|
|
||||||
ORDER BY o.dated DESC, o.created DESC, o.outFk DESC;
|
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
||||||
SET vDone = TRUE;
|
|
||||||
|
|
||||||
SET vSupplied = 0;
|
|
||||||
|
|
||||||
OPEN vPicks;
|
|
||||||
|
|
||||||
myLoop: LOOP
|
|
||||||
SET vDone = FALSE;
|
|
||||||
FETCH vPicks INTO vPickFk, vPickOutFk, vPickQuantity;
|
|
||||||
|
|
||||||
IF vDone THEN
|
|
||||||
LEAVE myLoop;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
|
|
||||||
SET vSupplied = vSupplied + vPickGranted;
|
|
||||||
CALL buyPick_remove(vPickFk, vPickGranted, vPickQuantity);
|
|
||||||
|
|
||||||
UPDATE buyOut
|
|
||||||
SET isSync = FALSE,
|
|
||||||
lack = lack + vPickGranted
|
|
||||||
WHERE outFk = vPickOutFk;
|
|
||||||
|
|
||||||
IF vSupplied >= vRequested THEN
|
|
||||||
LEAVE myLoop;
|
|
||||||
END IF;
|
|
||||||
END LOOP;
|
|
||||||
|
|
||||||
CLOSE vPicks;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,95 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refresh`(
|
|
||||||
`vTable` VARCHAR(255),
|
|
||||||
`vId` INT,
|
|
||||||
`vSource` VARCHAR(255))
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* This procedure contains the common code used to refresh the out lot cache.
|
|
||||||
*
|
|
||||||
* @param vTable The id source table
|
|
||||||
* @param vId The lot id
|
|
||||||
* @param vSource The lot source
|
|
||||||
* @table tLotStatus Lots to modify
|
|
||||||
* @table tLotAlive Updated/Created alive lots data
|
|
||||||
*/
|
|
||||||
DECLARE vHasLots BOOL;
|
|
||||||
|
|
||||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
||||||
BEGIN
|
|
||||||
ROLLBACK;
|
|
||||||
RESIGNAL;
|
|
||||||
END;
|
|
||||||
|
|
||||||
IF vTable = 'lot' THEN
|
|
||||||
SELECT COUNT(*) > 0 INTO vHasLots FROM tLotStatus;
|
|
||||||
|
|
||||||
IF NOT vHasLots THEN
|
|
||||||
INSERT INTO tLotStatus
|
|
||||||
SET lotFk = vId,
|
|
||||||
isExcluded = TRUE,
|
|
||||||
isIncluded = FALSE;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
START TRANSACTION;
|
|
||||||
|
|
||||||
-- Delete excluded/deleted/dead outs
|
|
||||||
|
|
||||||
DELETE o FROM buyOut o
|
|
||||||
JOIN tLotStatus ls ON ls.lotFk = o.outFk
|
|
||||||
WHERE NOT ls.isIncluded;
|
|
||||||
|
|
||||||
-- Delete undead out picks
|
|
||||||
|
|
||||||
UPDATE buyLot l
|
|
||||||
JOIN buyPick p ON p.lotFk = l.lotFk
|
|
||||||
JOIN tLotStatus ls ON ls.lotFk = p.outFk
|
|
||||||
SET l.isSync = FALSE,
|
|
||||||
l.available = l.available + p.quantity
|
|
||||||
WHERE ls.isExcluded OR ls.isIncluded;
|
|
||||||
|
|
||||||
DELETE p FROM buyPick p
|
|
||||||
JOIN tLotStatus ls ON ls.lotFk = p.outFk
|
|
||||||
WHERE ls.isExcluded OR ls.isIncluded;
|
|
||||||
|
|
||||||
-- Update alive outs
|
|
||||||
|
|
||||||
INSERT INTO buyOut (
|
|
||||||
outFk,
|
|
||||||
source,
|
|
||||||
isSync,
|
|
||||||
warehouseFk,
|
|
||||||
dated,
|
|
||||||
itemFk,
|
|
||||||
quantity,
|
|
||||||
lack,
|
|
||||||
created,
|
|
||||||
isPicked
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
lotFk,
|
|
||||||
vSource,
|
|
||||||
FALSE,
|
|
||||||
warehouseFk,
|
|
||||||
dated,
|
|
||||||
itemFk,
|
|
||||||
quantity,
|
|
||||||
quantity,
|
|
||||||
created,
|
|
||||||
isPicked
|
|
||||||
FROM tLotAlive
|
|
||||||
ON DUPLICATE KEY UPDATE
|
|
||||||
source = VALUES(source),
|
|
||||||
warehouseFk = VALUES(warehouseFk),
|
|
||||||
dated = VALUES(dated),
|
|
||||||
itemFk = VALUES(itemFk),
|
|
||||||
quantity = VALUES(quantity),
|
|
||||||
lack = VALUES(lack),
|
|
||||||
created = VALUES(created),
|
|
||||||
isPicked = VALUES(isPicked),
|
|
||||||
isSync = VALUES(isSync);
|
|
||||||
|
|
||||||
COMMIT;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,39 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refreshBuy`(
|
|
||||||
`vTable` VARCHAR(255),
|
|
||||||
`vId` INT)
|
|
||||||
BEGIN
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tLotStatus
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT lotFk,
|
|
||||||
@isExcluded := b.quantity <= 0 isExcluded,
|
|
||||||
NOT @isExcluded AND b.isAlive isIncluded
|
|
||||||
FROM vn.buy b
|
|
||||||
JOIN vn.entry e ON e.id = b.entryFk
|
|
||||||
WHERE
|
|
||||||
(vTable = 'lot' AND b.lotFk = vId)
|
|
||||||
OR (vTable = 'entry' AND e.id = vId)
|
|
||||||
OR (vTable = 'travel' AND e.travelFk = vId);
|
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tLotAlive
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT
|
|
||||||
ls.lotFk,
|
|
||||||
t.warehouseOutFk warehouseFk,
|
|
||||||
ADDTIME(t.shipped, IFNULL(shipmentHour, '00:00:00')) dated,
|
|
||||||
t.isDelivered isPicked,
|
|
||||||
b.itemFk,
|
|
||||||
b.quantity,
|
|
||||||
b.created
|
|
||||||
FROM tLotStatus ls
|
|
||||||
JOIN vn.buy b ON b.lotFk = ls.lotFk
|
|
||||||
JOIN vn.entry e ON e.id = b.entryFk
|
|
||||||
JOIN vn.travel t ON t.id = e.travelFk
|
|
||||||
WHERE ls.isIncluded;
|
|
||||||
|
|
||||||
CALL buyOut_refresh(vTable, vId, 'buy');
|
|
||||||
CALL buyLot_refresh(vTable, vId);
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tLotStatus, tLotAlive;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,36 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refreshOrder`(
|
|
||||||
`vTable` VARCHAR(255),
|
|
||||||
`vId` INT)
|
|
||||||
BEGIN
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tLotStatus
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT lotFk,
|
|
||||||
@isExcluded := o.confirmed OR NOT isReserved OR r.amount <= 0 isExcluded,
|
|
||||||
NOT @isExcluded isIncluded
|
|
||||||
FROM hedera.orderRow r
|
|
||||||
JOIN hedera.`order` o ON o.id = r.orderFk
|
|
||||||
WHERE
|
|
||||||
(vTable = 'lot' AND r.lotFk = vId)
|
|
||||||
OR (vTable = 'order' AND o.id = vId);
|
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tLotAlive
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT
|
|
||||||
ls.lotFk,
|
|
||||||
r.warehouseFk,
|
|
||||||
r.shipment dated,
|
|
||||||
r.itemFk,
|
|
||||||
r.amount quantity,
|
|
||||||
r.created,
|
|
||||||
FALSE isPicked
|
|
||||||
FROM tLotStatus ls
|
|
||||||
JOIN hedera.orderRow r ON r.lotFk = ls.lotFk
|
|
||||||
JOIN hedera.`order` o ON o.id = r.orderFk
|
|
||||||
WHERE ls.isIncluded;
|
|
||||||
|
|
||||||
CALL buyOut_refresh(vTable, vId, 'orderRow');
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tLotStatus, tLotAlive;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,42 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_refreshSale`(
|
|
||||||
`vTable` VARCHAR(255),
|
|
||||||
`vId` INT)
|
|
||||||
BEGIN
|
|
||||||
DECLARE vAliveDate DATE;
|
|
||||||
|
|
||||||
SELECT util.VN_CURDATE() - INTERVAL saleLife MONTH
|
|
||||||
INTO vAliveDate
|
|
||||||
FROM config LIMIT 1;
|
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tLotStatus
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT lotFk,
|
|
||||||
@isExcluded := s.quantity < 0 isExcluded,
|
|
||||||
NOT @isExcluded AND t.isAlive isIncluded
|
|
||||||
FROM vn.sale s
|
|
||||||
JOIN vn.ticket t ON t.id = s.ticketFk
|
|
||||||
WHERE
|
|
||||||
(vTable = 'lot' AND s.lotFk = vId)
|
|
||||||
OR (vTable = 'ticket' AND t.id = vId);
|
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tLotAlive
|
|
||||||
ENGINE = MEMORY
|
|
||||||
SELECT
|
|
||||||
ls.lotFk,
|
|
||||||
t.warehouseFk,
|
|
||||||
t.shipped dated,
|
|
||||||
s.itemFk,
|
|
||||||
s.quantity,
|
|
||||||
s.created,
|
|
||||||
s.isPicked
|
|
||||||
FROM tLotStatus ls
|
|
||||||
JOIN vn.sale s ON s.lotFk = ls.lotFk
|
|
||||||
JOIN vn.ticket t ON t.id = s.ticketFk
|
|
||||||
WHERE ls.isIncluded;
|
|
||||||
|
|
||||||
CALL buyOut_refresh(vTable, vId, 'sale');
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tLotStatus, tLotAlive;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,64 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_requestQuantity`(
|
|
||||||
vSelf INT,
|
|
||||||
vRequested INT,
|
|
||||||
vDated DATETIME,
|
|
||||||
vLotFk INT,
|
|
||||||
OUT vSupplied INT)
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Disassociates out picks after the given date until the demanded quantity is
|
|
||||||
* satisfied.
|
|
||||||
*
|
|
||||||
* @param vSelf The buyOut reference
|
|
||||||
* @param vRequested The requested quantity
|
|
||||||
* @param vDate The starting date for the associated lots
|
|
||||||
* @param vLotFk The if of requesting lot
|
|
||||||
* @param vSupplied The supplied quantity
|
|
||||||
*/
|
|
||||||
DECLARE vPickFk INT;
|
|
||||||
DECLARE vPickLotFk INT;
|
|
||||||
DECLARE vPickQuantity INT;
|
|
||||||
DECLARE vPickGranted INT;
|
|
||||||
DECLARE vDone BOOL;
|
|
||||||
|
|
||||||
DECLARE vPicks CURSOR FOR
|
|
||||||
SELECT p.id, p.lotFk, p.quantity
|
|
||||||
FROM buyPick p
|
|
||||||
JOIN buyLot l USING(lotFk)
|
|
||||||
WHERE p.outFk = vSelf
|
|
||||||
AND (l.dated, p.lotFk) > (vDated, vLotFk)
|
|
||||||
ORDER BY l.dated, p.lotFk;
|
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
||||||
SET vDone = TRUE;
|
|
||||||
|
|
||||||
SET vSupplied = 0;
|
|
||||||
|
|
||||||
OPEN vPicks;
|
|
||||||
|
|
||||||
myLoop: LOOP
|
|
||||||
SET vDone = FALSE;
|
|
||||||
FETCH vPicks INTO vPickFk, vPickLotFk, vPickQuantity;
|
|
||||||
|
|
||||||
IF vDone THEN
|
|
||||||
LEAVE myLoop;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
|
|
||||||
SET vSupplied = vSupplied + vPickGranted;
|
|
||||||
CALL buyPick_remove(vPickFk, vPickGranted, vPickQuantity);
|
|
||||||
|
|
||||||
UPDATE buyLot
|
|
||||||
SET isSync = FALSE,
|
|
||||||
available = available + vPickGranted
|
|
||||||
WHERE lotFk = vPickLotFk;
|
|
||||||
|
|
||||||
IF vSupplied >= vRequested THEN
|
|
||||||
LEAVE myLoop;
|
|
||||||
END IF;
|
|
||||||
END LOOP;
|
|
||||||
|
|
||||||
CLOSE vPicks;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,15 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyPick_add`(
|
|
||||||
vLotFk INT,
|
|
||||||
vOutFk INT,
|
|
||||||
vQuantity INT
|
|
||||||
)
|
|
||||||
BEGIN
|
|
||||||
INSERT INTO buyPick
|
|
||||||
SET lotFk = vLotFk,
|
|
||||||
outFk = vOutFk,
|
|
||||||
quantity = vQuantity
|
|
||||||
ON DUPLICATE KEY UPDATE
|
|
||||||
quantity = quantity + vQuantity;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,17 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyPick_remove`(
|
|
||||||
vSelf INT,
|
|
||||||
vQuantity INT,
|
|
||||||
vTotalQuantity INT
|
|
||||||
)
|
|
||||||
BEGIN
|
|
||||||
IF vQuantity < vTotalQuantity THEN
|
|
||||||
UPDATE buyPick
|
|
||||||
SET quantity = quantity - vQuantity
|
|
||||||
WHERE id = vSelf;
|
|
||||||
ELSE
|
|
||||||
DELETE FROM buyPick
|
|
||||||
WHERE id = vSelf;
|
|
||||||
END IF;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`inbound_addPick`(
|
||||||
|
vSelf INT,
|
||||||
|
vOutboundFk INT,
|
||||||
|
vQuantity INT
|
||||||
|
)
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO inboundPick
|
||||||
|
SET
|
||||||
|
inboundFk = vSelf,
|
||||||
|
outboundFk = vOutboundFk,
|
||||||
|
quantity = vQuantity
|
||||||
|
ON DUPLICATE KEY UPDATE
|
||||||
|
quantity = quantity + vQuantity;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,20 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`inbound_removePick`(
|
||||||
|
vSelf INT,
|
||||||
|
vOutboundFk INT,
|
||||||
|
vQuantity INT,
|
||||||
|
vTotalQuantity INT
|
||||||
|
)
|
||||||
|
BEGIN
|
||||||
|
IF vQuantity < vTotalQuantity THEN
|
||||||
|
UPDATE inboundPick
|
||||||
|
SET quantity = quantity - vQuantity
|
||||||
|
WHERE inboundFk = vSelf
|
||||||
|
AND outboundFk = vOutboundFk;
|
||||||
|
ELSE
|
||||||
|
DELETE FROM inboundPick
|
||||||
|
WHERE inboundFk = vSelf
|
||||||
|
AND outboundFk = vOutboundFk;
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,61 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`inbound_requestQuantity`(
|
||||||
|
vSelf INT,
|
||||||
|
vRequested INT,
|
||||||
|
vDated DATETIME,
|
||||||
|
OUT vSupplied INT)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Disassociates inbound picks after the given date until the
|
||||||
|
* demanded quantity is satisfied.
|
||||||
|
*
|
||||||
|
* @param vSelf The inbound reference
|
||||||
|
* @param vRequested The requested quantity
|
||||||
|
* @param vDate The starting date for the associated outbounds
|
||||||
|
* @param vSupplied The supplied quantity
|
||||||
|
*/
|
||||||
|
DECLARE vOutboundFk INT;
|
||||||
|
DECLARE vPickQuantity INT;
|
||||||
|
DECLARE vPickGranted INT;
|
||||||
|
DECLARE vDone BOOL;
|
||||||
|
|
||||||
|
DECLARE vPicks CURSOR FOR
|
||||||
|
SELECT p.outboundFk, p.quantity
|
||||||
|
FROM inboundPick p
|
||||||
|
JOIN outbound o ON o.id = p.outboundFk
|
||||||
|
WHERE p.inboundFk = vSelf
|
||||||
|
AND o.dated > vDated
|
||||||
|
ORDER BY o.dated DESC, o.created DESC;
|
||||||
|
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||||
|
SET vDone = TRUE;
|
||||||
|
|
||||||
|
SET vSupplied = 0;
|
||||||
|
|
||||||
|
OPEN vPicks;
|
||||||
|
|
||||||
|
myLoop: LOOP
|
||||||
|
SET vDone = FALSE;
|
||||||
|
FETCH vPicks INTO vOutboundFk, vPickQuantity;
|
||||||
|
|
||||||
|
IF vDone THEN
|
||||||
|
LEAVE myLoop;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
|
||||||
|
SET vSupplied = vSupplied + vPickGranted;
|
||||||
|
CALL inbound_removePick(vSelf, vOutboundFk, vPickGranted, vPickQuantity);
|
||||||
|
|
||||||
|
UPDATE outbound
|
||||||
|
SET isSync = FALSE,
|
||||||
|
lack = lack + vPickGranted
|
||||||
|
WHERE id = vOutboundFk;
|
||||||
|
|
||||||
|
IF vSupplied >= vRequested THEN
|
||||||
|
LEAVE myLoop;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
CLOSE vPicks;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -1,10 +1,10 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyLot_sync`(vSelf INT)
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`inbound_sync`(vSelf INT)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Associates a lot with their possible outs, updating it's available.
|
* Associates a inbound with their possible outbounds, updating it's available.
|
||||||
*
|
*
|
||||||
* @param vSelf The lot id
|
* @param vSelf The inbound identifier
|
||||||
*/
|
*/
|
||||||
DECLARE vDated DATETIME;
|
DECLARE vDated DATETIME;
|
||||||
DECLARE vExpired DATETIME;
|
DECLARE vExpired DATETIME;
|
||||||
|
@ -14,37 +14,37 @@ BEGIN
|
||||||
DECLARE vAvailable INT;
|
DECLARE vAvailable INT;
|
||||||
DECLARE vSupplied INT;
|
DECLARE vSupplied INT;
|
||||||
DECLARE vSuppliedFromRequest INT;
|
DECLARE vSuppliedFromRequest INT;
|
||||||
DECLARE vOutFk INT;
|
DECLARE vOutboundFk INT;
|
||||||
DECLARE vLack INT;
|
DECLARE vLack INT;
|
||||||
DECLARE vHasPicks BOOL;
|
DECLARE vHasPicks BOOL;
|
||||||
DECLARE vDone BOOL;
|
DECLARE vDone BOOL;
|
||||||
|
|
||||||
DECLARE vOuts CURSOR FOR
|
DECLARE vOutbounds CURSOR FOR
|
||||||
SELECT outFk, lack, lack < quantity
|
SELECT id, lack, lack < quantity
|
||||||
FROM buyOut
|
FROM outbound
|
||||||
WHERE warehouseFk = vWarehouse
|
WHERE warehouseFk = vWarehouse
|
||||||
AND itemFk = vItem
|
AND itemFk = vItem
|
||||||
AND dated >= vDated
|
AND dated >= vDated
|
||||||
AND (vExpired IS NULL OR dated < vExpired)
|
AND (vExpired IS NULL OR dated < vExpired)
|
||||||
ORDER BY dated, created, outFk;
|
ORDER BY dated, created;
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||||
SET vDone = TRUE;
|
SET vDone = TRUE;
|
||||||
|
|
||||||
SELECT warehouseFk, itemFk, available, quantity, expired, dated
|
SELECT warehouseFk, itemFk, available, quantity, expired, dated
|
||||||
INTO vWarehouse, vItem, vAvailable, vQuantity, vExpired, vDated
|
INTO vWarehouse, vItem, vAvailable, vQuantity, vExpired, vDated
|
||||||
FROM buyLot
|
FROM inbound
|
||||||
WHERE lotFk = vSelf;
|
WHERE id = vSelf;
|
||||||
|
|
||||||
IF vAvailable IS NULL THEN
|
IF vAvailable IS NULL THEN
|
||||||
SET vAvailable = vQuantity;
|
SET vAvailable = vQuantity;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
OPEN vOuts;
|
OPEN vOutbounds;
|
||||||
|
|
||||||
myLoop: LOOP
|
myLoop: LOOP
|
||||||
SET vDone = FALSE;
|
SET vDone = FALSE;
|
||||||
FETCH vOuts INTO vOutFk, vLack, vHasPicks;
|
FETCH vOutbounds INTO vOutboundFk, vLack, vHasPicks;
|
||||||
|
|
||||||
IF vDone THEN
|
IF vDone THEN
|
||||||
LEAVE myLoop;
|
LEAVE myLoop;
|
||||||
|
@ -54,19 +54,19 @@ BEGIN
|
||||||
|
|
||||||
IF vSupplied > 0 THEN
|
IF vSupplied > 0 THEN
|
||||||
SET vAvailable = vAvailable - vSupplied;
|
SET vAvailable = vAvailable - vSupplied;
|
||||||
UPDATE buyOut
|
UPDATE outbound
|
||||||
SET lack = lack - vSupplied
|
SET lack = lack - vSupplied
|
||||||
WHERE outFk = vOutFk;
|
WHERE id = vOutboundFk;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF vHasPicks AND vAvailable > 0 THEN
|
IF vHasPicks AND vAvailable > 0 THEN
|
||||||
CALL buyOut_requestQuantity(vOutFk, vAvailable, vDated, vSelf, vSuppliedFromRequest);
|
CALL outbound_requestQuantity(vOutboundFk, vAvailable, vDated, vSuppliedFromRequest);
|
||||||
SET vSupplied = vSupplied + vSuppliedFromRequest;
|
SET vSupplied = vSupplied + vSuppliedFromRequest;
|
||||||
SET vAvailable = vAvailable - vSuppliedFromRequest;
|
SET vAvailable = vAvailable - vSuppliedFromRequest;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF vSupplied > 0 THEN
|
IF vSupplied > 0 THEN
|
||||||
CALL buyPick_add(vSelf, vOutFk, vSupplied);
|
CALL inbound_addPick(vSelf, vOutboundFk, vSupplied);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF vAvailable <= 0 THEN
|
IF vAvailable <= 0 THEN
|
||||||
|
@ -74,11 +74,11 @@ BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
CLOSE vOuts;
|
CLOSE vOutbounds;
|
||||||
|
|
||||||
UPDATE buyLot
|
UPDATE inbound
|
||||||
SET isSync = TRUE,
|
SET isSync = TRUE,
|
||||||
available = vAvailable
|
available = vAvailable
|
||||||
WHERE lotFk = vSelf;
|
WHERE id = vSelf;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -0,0 +1,7 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`log_clean`()
|
||||||
|
BEGIN
|
||||||
|
DELETE FROM inbound WHERE dated = vn.getInventoryDate();
|
||||||
|
DELETE FROM outbound WHERE dated = vn.getInventoryDate();
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,19 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`log_delete`(vTableName VARCHAR(255), vTableId INT)
|
||||||
|
proc: BEGIN
|
||||||
|
/**
|
||||||
|
* Processes orphan transactions.
|
||||||
|
*/
|
||||||
|
IF vTableName NOT IN ('buy', 'sale', 'orderRow') THEN
|
||||||
|
LEAVE proc;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DELETE FROM inbound
|
||||||
|
WHERE tableName = vTableName COLLATE utf8_general_ci
|
||||||
|
AND tableId = vTableId;
|
||||||
|
|
||||||
|
DELETE FROM outbound
|
||||||
|
WHERE tableName = vTableName COLLATE utf8_general_ci
|
||||||
|
AND tableId = vTableId;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,33 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`log_refreshAll`()
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Recalculates the entire cache. It takes a considerable time,
|
||||||
|
* please avoid calls to this procedure from commonly used operations.
|
||||||
|
*/
|
||||||
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
DO RELEASE_LOCK('stock.log_sync');
|
||||||
|
RESIGNAL;
|
||||||
|
END;
|
||||||
|
|
||||||
|
IF !GET_LOCK('stock.log_sync', 30) THEN
|
||||||
|
CALL util.throw('Lock timeout exceeded');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
TRUNCATE TABLE stock.`log`;
|
||||||
|
TRUNCATE TABLE stock.`inbound`;
|
||||||
|
TRUNCATE TABLE stock.`inboundPick`;
|
||||||
|
TRUNCATE TABLE stock.`outbound`;
|
||||||
|
TRUNCATE TABLE stock.`visible`;
|
||||||
|
|
||||||
|
CALL log_refreshSale(NULL, NULL);
|
||||||
|
CALL log_refreshBuy(NULL, NULL);
|
||||||
|
CALL log_refreshOrder(NULL, NULL);
|
||||||
|
|
||||||
|
UPDATE outbound SET isSync = TRUE;
|
||||||
|
CALL log_sync(TRUE);
|
||||||
|
|
||||||
|
DO RELEASE_LOCK('stock.log_sync');
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,73 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`log_refreshBuy`(
|
||||||
|
`vTableName` VARCHAR(255),
|
||||||
|
`vTableId` INT)
|
||||||
|
BEGIN
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tValues;
|
||||||
|
CREATE TEMPORARY TABLE tValues
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT b.id buyFk,
|
||||||
|
e.id entryFk,
|
||||||
|
t.id travelFk,
|
||||||
|
b.itemFk,
|
||||||
|
t.isRaid,
|
||||||
|
ADDTIME(t.shipped,
|
||||||
|
IFNULL(t.shipmentHour, '00:00:00')) shipped,
|
||||||
|
t.warehouseOutFk,
|
||||||
|
t.isDelivered,
|
||||||
|
ADDTIME(t.landed,
|
||||||
|
IFNULL(t.landingHour, '00:00:00')) landed,
|
||||||
|
t.warehouseInFk,
|
||||||
|
t.isReceived,
|
||||||
|
tp.life,
|
||||||
|
ABS(b.quantity) quantity,
|
||||||
|
b.created,
|
||||||
|
b.quantity > 0 isIn,
|
||||||
|
t.shipped < vn.getInventoryDate() lessThanInventory
|
||||||
|
FROM vn.buy b
|
||||||
|
JOIN vn.entry e ON e.id = b.entryFk
|
||||||
|
JOIN vn.travel t ON t.id = e.travelFk
|
||||||
|
JOIN vn.item i ON i.id = b.itemFk
|
||||||
|
JOIN vn.itemType tp ON tp.id = i.typeFk
|
||||||
|
WHERE (
|
||||||
|
vTableId IS NULL
|
||||||
|
OR (vTableName = 'travel' AND t.id = vTableId)
|
||||||
|
OR (vTableName = 'entry' AND e.id = vTableId)
|
||||||
|
OR (vTableName = 'buy' AND b.id = vTableId)
|
||||||
|
)
|
||||||
|
AND t.landed >= vn.getInventoryDate()
|
||||||
|
AND b.quantity != 0;
|
||||||
|
|
||||||
|
REPLACE INTO inbound (
|
||||||
|
tableName, tableId, warehouseFk, dated,
|
||||||
|
itemFk, expired, quantity, isPicked
|
||||||
|
)
|
||||||
|
SELECT 'buy',
|
||||||
|
buyFk,
|
||||||
|
IF(isIn, warehouseInFk, warehouseOutFk),
|
||||||
|
@dated := IF(isIn, landed, shipped),
|
||||||
|
itemFk,
|
||||||
|
TIMESTAMPADD(DAY, life, @dated),
|
||||||
|
quantity,
|
||||||
|
IF(isIn, isReceived, isDelivered) AND NOT isRaid
|
||||||
|
FROM tValues
|
||||||
|
WHERE isIn OR !lessThanInventory;
|
||||||
|
|
||||||
|
REPLACE INTO outbound (
|
||||||
|
tableName, tableId, warehouseFk, dated,
|
||||||
|
itemFk, created, quantity, isPicked
|
||||||
|
)
|
||||||
|
SELECT 'buy',
|
||||||
|
buyFk,
|
||||||
|
IF(isIn, warehouseOutFk, warehouseInFk),
|
||||||
|
IF(isIn, shipped, landed),
|
||||||
|
itemFk,
|
||||||
|
created,
|
||||||
|
quantity,
|
||||||
|
IF(isIn, isDelivered, isReceived) AND NOT isRaid
|
||||||
|
FROM tValues
|
||||||
|
WHERE !isIn OR !lessThanInventory;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tValues;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,47 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`log_refreshOrder`(
|
||||||
|
`vTableName` VARCHAR(255),
|
||||||
|
`vTableId` INT)
|
||||||
|
BEGIN
|
||||||
|
DECLARE vExpireTime INT DEFAULT 20;
|
||||||
|
DECLARE vExpired DATETIME DEFAULT TIMESTAMPADD(MINUTE, -vExpireTime, util.VN_NOW());
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tValues;
|
||||||
|
CREATE TEMPORARY TABLE tValues
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT
|
||||||
|
r.id rowFk,
|
||||||
|
r.itemFk,
|
||||||
|
r.warehouseFk,
|
||||||
|
r.shipment shipped,
|
||||||
|
r.amount quantity,
|
||||||
|
r.created
|
||||||
|
FROM hedera.orderRow r
|
||||||
|
JOIN hedera.`order` o ON o.id = r.orderFk
|
||||||
|
WHERE (
|
||||||
|
vTableId IS NULL
|
||||||
|
OR (vTableName = 'order' AND o.id = vTableId)
|
||||||
|
OR (vTableName = 'orderRow' AND r.id = vTableId)
|
||||||
|
)
|
||||||
|
AND !o.confirmed
|
||||||
|
AND r.shipment >= vn.getInventoryDate()
|
||||||
|
AND r.created >= vExpired
|
||||||
|
AND r.amount != 0;
|
||||||
|
|
||||||
|
REPLACE INTO outbound (
|
||||||
|
tableName, tableId, warehouseFk, dated,
|
||||||
|
itemFk, created, expired, quantity
|
||||||
|
)
|
||||||
|
SELECT 'orderRow',
|
||||||
|
rowFk,
|
||||||
|
warehouseFk,
|
||||||
|
shipped,
|
||||||
|
itemFk,
|
||||||
|
created,
|
||||||
|
TIMESTAMPADD(MINUTE, vExpireTime, created),
|
||||||
|
quantity
|
||||||
|
FROM tValues;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tValues;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,66 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`log_refreshSale`(
|
||||||
|
`vTableName` VARCHAR(255),
|
||||||
|
`vTableId` INT)
|
||||||
|
BEGIN
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tValues;
|
||||||
|
CREATE TEMPORARY TABLE tValues
|
||||||
|
ENGINE = MEMORY
|
||||||
|
SELECT
|
||||||
|
m.id saleFk,
|
||||||
|
m.ticketFk,
|
||||||
|
m.itemFk,
|
||||||
|
t.warehouseFk,
|
||||||
|
t.shipped,
|
||||||
|
ABS(m.quantity) quantity,
|
||||||
|
m.created,
|
||||||
|
TIMESTAMPADD(DAY, tp.life, t.shipped) expired,
|
||||||
|
m.quantity < 0 isIn,
|
||||||
|
m.isPicked OR s.alertLevel > al.id isPicked
|
||||||
|
FROM vn.sale m
|
||||||
|
JOIN vn.ticket t ON t.id = m.ticketFk
|
||||||
|
JOIN vn.ticketState s ON s.ticketFk = t.id
|
||||||
|
JOIN vn.item i ON i.id = m.itemFk
|
||||||
|
JOIN vn.itemType tp ON tp.id = i.typeFk
|
||||||
|
JOIN vn.alertLevel al ON al.code = 'ON_PREPARATION'
|
||||||
|
WHERE (
|
||||||
|
vTableId IS NULL
|
||||||
|
OR (vTableName = 'ticket' AND t.id = vTableId)
|
||||||
|
OR (vTableName = 'sale' AND m.id = vTableId)
|
||||||
|
)
|
||||||
|
AND t.shipped >= vn.getInventoryDate()
|
||||||
|
AND m.quantity != 0;
|
||||||
|
|
||||||
|
REPLACE INTO inbound (
|
||||||
|
tableName, tableId, warehouseFk, dated,
|
||||||
|
itemFk, expired, quantity, isPicked
|
||||||
|
)
|
||||||
|
SELECT 'sale',
|
||||||
|
saleFk,
|
||||||
|
warehouseFk,
|
||||||
|
shipped,
|
||||||
|
itemFk,
|
||||||
|
expired,
|
||||||
|
quantity,
|
||||||
|
isPicked
|
||||||
|
FROM tValues
|
||||||
|
WHERE isIn;
|
||||||
|
|
||||||
|
REPLACE INTO outbound (
|
||||||
|
tableName, tableId, warehouseFk, dated,
|
||||||
|
itemFk, created, quantity, isPicked
|
||||||
|
)
|
||||||
|
SELECT 'sale',
|
||||||
|
saleFk,
|
||||||
|
warehouseFk,
|
||||||
|
shipped,
|
||||||
|
itemFk,
|
||||||
|
created,
|
||||||
|
quantity,
|
||||||
|
isPicked
|
||||||
|
FROM tValues
|
||||||
|
WHERE !isIn;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tValues;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,123 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`log_sync`(vSync BOOL)
|
||||||
|
proc: BEGIN
|
||||||
|
DECLARE vDone BOOL;
|
||||||
|
DECLARE vLogId INT;
|
||||||
|
DECLARE vHasPendingSync BOOL;
|
||||||
|
DECLARE vOperation VARCHAR(255);
|
||||||
|
DECLARE vTableName VARCHAR(255);
|
||||||
|
DECLARE vTableId VARCHAR(255);
|
||||||
|
DECLARE vInboundFk INT;
|
||||||
|
DECLARE vOutboundFk INT;
|
||||||
|
|
||||||
|
DECLARE cInbound CURSOR FOR
|
||||||
|
SELECT id FROM inbound
|
||||||
|
WHERE !isSync
|
||||||
|
ORDER BY dated;
|
||||||
|
|
||||||
|
DECLARE cOutbound CURSOR FOR
|
||||||
|
SELECT id FROM outbound
|
||||||
|
WHERE !isSync
|
||||||
|
ORDER BY dated;
|
||||||
|
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||||
|
SET vDone = TRUE;
|
||||||
|
|
||||||
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
ROLLBACK;
|
||||||
|
RESIGNAL;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- Applies changes
|
||||||
|
|
||||||
|
opsLoop: LOOP
|
||||||
|
START TRANSACTION;
|
||||||
|
|
||||||
|
SET vDone = FALSE;
|
||||||
|
SELECT id, operation, tableName, tableId
|
||||||
|
INTO vLogId, vOperation, vTableName, vTableId
|
||||||
|
FROM `log`
|
||||||
|
ORDER BY id LIMIT 1
|
||||||
|
FOR UPDATE;
|
||||||
|
|
||||||
|
IF vDone THEN
|
||||||
|
COMMIT;
|
||||||
|
LEAVE opsLoop;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
CALL log_delete(vTableName, vTableId);
|
||||||
|
|
||||||
|
IF vOperation = 'insert' THEN
|
||||||
|
IF vTableName IN ('travel', 'entry', 'buy') THEN
|
||||||
|
CALL log_refreshBuy(vTableName, vTableId);
|
||||||
|
ELSEIF vTableName IN ('ticket', 'sale') THEN
|
||||||
|
CALL log_refreshSale(vTableName, vTableId);
|
||||||
|
ELSEIF vTableName IN ('order', 'orderRow') THEN
|
||||||
|
CALL log_refreshOrder(vTableName, vTableId);
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DELETE FROM `log` WHERE id = vLogId;
|
||||||
|
SET vSync = TRUE;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
IF !vSync THEN
|
||||||
|
LEAVE proc;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- Deletes expired outbounds
|
||||||
|
|
||||||
|
DELETE FROM outbound WHERE expired <= util.VN_NOW();
|
||||||
|
|
||||||
|
-- Attaches desync inbounds
|
||||||
|
|
||||||
|
REPEAT
|
||||||
|
OPEN cInbound;
|
||||||
|
SET vHasPendingSync = FALSE;
|
||||||
|
|
||||||
|
inboundLoop: LOOP
|
||||||
|
SET vDone = FALSE;
|
||||||
|
FETCH cInbound INTO vInboundFk;
|
||||||
|
|
||||||
|
IF vDone THEN
|
||||||
|
LEAVE inboundLoop;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
START TRANSACTION;
|
||||||
|
CALL inbound_sync(vInboundFk);
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
SET vHasPendingSync = TRUE;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
CLOSE cInbound;
|
||||||
|
UNTIL !vHasPendingSync END REPEAT;
|
||||||
|
|
||||||
|
-- Attaches desync outbounds
|
||||||
|
|
||||||
|
REPEAT
|
||||||
|
OPEN cOutbound;
|
||||||
|
SET vHasPendingSync = FALSE;
|
||||||
|
|
||||||
|
outboundLoop: LOOP
|
||||||
|
SET vDone = FALSE;
|
||||||
|
FETCH cOutbound INTO vOutboundFk;
|
||||||
|
|
||||||
|
IF vDone THEN
|
||||||
|
LEAVE outboundLoop;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
START TRANSACTION;
|
||||||
|
CALL outbound_sync(vOutboundFk);
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
SET vHasPendingSync = TRUE;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
CLOSE cOutbound;
|
||||||
|
UNTIL !vHasPendingSync END REPEAT;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,16 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`log_syncNoWait`()
|
||||||
|
BEGIN
|
||||||
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
DO RELEASE_LOCK('stock.log_sync');
|
||||||
|
RESIGNAL;
|
||||||
|
END;
|
||||||
|
|
||||||
|
IF GET_LOCK('stock.log_sync', 0) THEN
|
||||||
|
CALL log_sync(FALSE);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DO RELEASE_LOCK('stock.log_sync');
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,61 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`outbound_requestQuantity`(
|
||||||
|
vSelf INT,
|
||||||
|
vRequested INT,
|
||||||
|
vDated DATETIME,
|
||||||
|
OUT vSupplied INT)
|
||||||
|
BEGIN
|
||||||
|
/**
|
||||||
|
* Disassociates outbound picks after the given date until the
|
||||||
|
* demanded quantity is satisfied.
|
||||||
|
*
|
||||||
|
* @param vSelf The outbound reference
|
||||||
|
* @param vRequested The requested quantity
|
||||||
|
* @param vDate The starting date for the associated inbounds
|
||||||
|
* @param vSupplied The supplied quantity
|
||||||
|
*/
|
||||||
|
DECLARE vInboundFk INT;
|
||||||
|
DECLARE vPickQuantity INT;
|
||||||
|
DECLARE vPickGranted INT;
|
||||||
|
DECLARE vDone BOOL;
|
||||||
|
|
||||||
|
DECLARE vPicks CURSOR FOR
|
||||||
|
SELECT p.inboundFk, p.quantity
|
||||||
|
FROM inboundPick p
|
||||||
|
JOIN inbound i ON i.id = p.inboundFk
|
||||||
|
WHERE p.outboundFk = vSelf
|
||||||
|
AND i.dated > vDated
|
||||||
|
ORDER BY i.dated DESC;
|
||||||
|
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||||
|
SET vDone = TRUE;
|
||||||
|
|
||||||
|
SET vSupplied = 0;
|
||||||
|
|
||||||
|
OPEN vPicks;
|
||||||
|
|
||||||
|
myLoop: LOOP
|
||||||
|
SET vDone = FALSE;
|
||||||
|
FETCH vPicks INTO vInboundFk, vPickQuantity;
|
||||||
|
|
||||||
|
IF vDone THEN
|
||||||
|
LEAVE myLoop;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET vPickGranted = LEAST(vRequested - vSupplied, vPickQuantity);
|
||||||
|
SET vSupplied = vSupplied + vPickGranted;
|
||||||
|
CALL inbound_removePick(vInboundFk, vSelf, vPickGranted, vPickQuantity);
|
||||||
|
|
||||||
|
UPDATE inbound
|
||||||
|
SET isSync = FALSE,
|
||||||
|
available = available + vPickGranted
|
||||||
|
WHERE id = vInboundFk;
|
||||||
|
|
||||||
|
IF vSupplied >= vRequested THEN
|
||||||
|
LEAVE myLoop;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
CLOSE vPicks;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -1,10 +1,10 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`buyOut_sync`(vSelf INT)
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`outbound_sync`(vSelf INT)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Attaches an out with available lots.
|
* Attaches a outbound with available inbounds.
|
||||||
*
|
*
|
||||||
* @param vSelf The buyOut reference
|
* @param vSelf The outbound reference
|
||||||
*/
|
*/
|
||||||
DECLARE vDated DATETIME;
|
DECLARE vDated DATETIME;
|
||||||
DECLARE vItem INT;
|
DECLARE vItem INT;
|
||||||
|
@ -12,33 +12,33 @@ BEGIN
|
||||||
DECLARE vLack INT;
|
DECLARE vLack INT;
|
||||||
DECLARE vSupplied INT;
|
DECLARE vSupplied INT;
|
||||||
DECLARE vSuppliedFromRequest INT;
|
DECLARE vSuppliedFromRequest INT;
|
||||||
DECLARE vLotFk INT;
|
DECLARE vInboundFk INT;
|
||||||
DECLARE vAvailable INT;
|
DECLARE vAvailable INT;
|
||||||
DECLARE vHasPicks BOOL;
|
DECLARE vHasPicks BOOL;
|
||||||
DECLARE vDone BOOL;
|
DECLARE vDone BOOL;
|
||||||
|
|
||||||
DECLARE vBuyLots CURSOR FOR
|
DECLARE vInbounds CURSOR FOR
|
||||||
SELECT lotFk, available, available < quantity
|
SELECT id, available, available < quantity
|
||||||
FROM buyLot
|
FROM inbound
|
||||||
WHERE warehouseFk = vWarehouse
|
WHERE warehouseFk = vWarehouse
|
||||||
AND itemFk = vItem
|
AND itemFk = vItem
|
||||||
AND dated <= vDated
|
AND dated <= vDated
|
||||||
AND (expired IS NULL OR expired > vDated)
|
AND (expired IS NULL OR expired > vDated)
|
||||||
ORDER BY dated, lotFk;
|
ORDER BY dated;
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
||||||
SET vDone = TRUE;
|
SET vDone = TRUE;
|
||||||
|
|
||||||
SELECT warehouseFk, itemFk, dated, lack
|
SELECT warehouseFk, itemFk, dated, lack
|
||||||
INTO vWarehouse, vItem, vDated, vLack
|
INTO vWarehouse, vItem, vDated, vLack
|
||||||
FROM buyOut
|
FROM outbound
|
||||||
WHERE outFk = vSelf;
|
WHERE id = vSelf;
|
||||||
|
|
||||||
OPEN vBuyLots;
|
OPEN vInbounds;
|
||||||
|
|
||||||
myLoop: LOOP
|
myLoop: LOOP
|
||||||
SET vDone = FALSE;
|
SET vDone = FALSE;
|
||||||
FETCH vBuyLots INTO vLotFk, vAvailable, vHasPicks;
|
FETCH vInbounds INTO vInboundFk, vAvailable, vHasPicks;
|
||||||
|
|
||||||
IF vDone THEN
|
IF vDone THEN
|
||||||
LEAVE myLoop;
|
LEAVE myLoop;
|
||||||
|
@ -48,19 +48,19 @@ BEGIN
|
||||||
|
|
||||||
IF vSupplied > 0 THEN
|
IF vSupplied > 0 THEN
|
||||||
SET vLack = vLack - vSupplied;
|
SET vLack = vLack - vSupplied;
|
||||||
UPDATE buyLot
|
UPDATE inbound
|
||||||
SET available = available - vSupplied
|
SET available = available - vSupplied
|
||||||
WHERE lotFk = vLotFk;
|
WHERE id = vInboundFk;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF vHasPicks AND vLack > 0 THEN
|
IF vHasPicks AND vLack > 0 THEN
|
||||||
CALL buyLot_requestQuantity(vLotFk, vLack, vDated, vSelf, vSuppliedFromRequest);
|
CALL inbound_requestQuantity(vInboundFk, vLack, vDated, vSuppliedFromRequest);
|
||||||
SET vSupplied = vSupplied + vSuppliedFromRequest;
|
SET vSupplied = vSupplied + vSuppliedFromRequest;
|
||||||
SET vLack = vLack - vSuppliedFromRequest;
|
SET vLack = vLack - vSuppliedFromRequest;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF vSupplied > 0 THEN
|
IF vSupplied > 0 THEN
|
||||||
CALL buyPick_add(vLotFk, vSelf, vSupplied);
|
CALL inbound_addPick(vInboundFk, vSelf, vSupplied);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF vLack = 0 THEN
|
IF vLack = 0 THEN
|
||||||
|
@ -68,11 +68,11 @@ BEGIN
|
||||||
END IF;
|
END IF;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
CLOSE vBuyLots;
|
CLOSE vInbounds;
|
||||||
|
|
||||||
UPDATE buyOut
|
UPDATE outbound
|
||||||
SET isSync = TRUE,
|
SET isSync = TRUE,
|
||||||
lack = vLack
|
lack = vLack
|
||||||
WHERE outFk = vSelf;
|
WHERE id = vSelf;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
|
@ -1,32 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`stock_clean`()
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Cleans current time dependent cache records.
|
|
||||||
*/
|
|
||||||
DECLARE vExpired DATETIME;
|
|
||||||
DECLARE vAliveDate DATE;
|
|
||||||
|
|
||||||
-- Expired order reserves
|
|
||||||
|
|
||||||
SELECT SUBTIME(util.VN_NOW(), reserveTime)
|
|
||||||
INTO vExpired
|
|
||||||
FROM hedera.orderConfig LIMIT 1;
|
|
||||||
|
|
||||||
UPDATE hedera.order
|
|
||||||
SET isReserved = FALSE
|
|
||||||
WHERE created < vExpired
|
|
||||||
AND isReserved;
|
|
||||||
|
|
||||||
-- Frozen old sales
|
|
||||||
|
|
||||||
SELECT util.VN_CURDATE() - INTERVAL saleLife DAY
|
|
||||||
INTO vAliveDate
|
|
||||||
FROM config LIMIT 1;
|
|
||||||
|
|
||||||
UPDATE vn.ticket
|
|
||||||
SET isAlive = FALSE
|
|
||||||
WHERE shipped < vAliveDate
|
|
||||||
AND isAlive;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,90 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`stock_refreshAll`()
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Recalculates the entire cache. It takes a considerable time,
|
|
||||||
* please avoid calls to this procedure from commonly used operations.
|
|
||||||
*/
|
|
||||||
DECLARE vDone BOOL;
|
|
||||||
DECLARE vId INT;
|
|
||||||
|
|
||||||
DECLARE vEntries CURSOR FOR
|
|
||||||
SELECT DISTINCT e.id
|
|
||||||
FROM vn.buy b
|
|
||||||
JOIN vn.entry e ON b.entryFk = e.id
|
|
||||||
WHERE b.isAlive;
|
|
||||||
|
|
||||||
DECLARE vTickets CURSOR FOR
|
|
||||||
SELECT id FROM vn.ticket WHERE isAlive;
|
|
||||||
|
|
||||||
DECLARE vOrderRows CURSOR FOR
|
|
||||||
SELECT lotFk FROM hedera.orderRow WHERE isReserved;
|
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
||||||
SET vDone = TRUE;
|
|
||||||
|
|
||||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
||||||
BEGIN
|
|
||||||
DO RELEASE_LOCK('stock.stock_refreshAll');
|
|
||||||
RESIGNAL;
|
|
||||||
END;
|
|
||||||
|
|
||||||
IF NOT GET_LOCK('stock.stock_refreshAll', 30) THEN
|
|
||||||
CALL util.throw('Lock timeout exceeded');
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Prune cache
|
|
||||||
|
|
||||||
DELETE p FROM buyPick p JOIN buyLot l USING(lotFk);
|
|
||||||
TRUNCATE TABLE buyLot;
|
|
||||||
TRUNCATE TABLE buyOut;
|
|
||||||
|
|
||||||
-- Populate cache
|
|
||||||
|
|
||||||
OPEN vEntries;
|
|
||||||
buyLoop: LOOP
|
|
||||||
SET vDone = FALSE;
|
|
||||||
FETCH vEntries INTO vId;
|
|
||||||
|
|
||||||
IF vDone THEN
|
|
||||||
LEAVE buyLoop;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
CALL buyOut_refreshBuy('entry', vId);
|
|
||||||
END LOOP;
|
|
||||||
CLOSE vEntries;
|
|
||||||
|
|
||||||
OPEN vOrderRows;
|
|
||||||
orderLoop: LOOP
|
|
||||||
SET vDone = FALSE;
|
|
||||||
FETCH vOrderRows INTO vId;
|
|
||||||
|
|
||||||
IF vDone THEN
|
|
||||||
LEAVE orderLoop;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
CALL buyOut_refreshOrder('lot', vId);
|
|
||||||
END LOOP;
|
|
||||||
CLOSE vOrderRows;
|
|
||||||
|
|
||||||
OPEN vTickets;
|
|
||||||
saleLoop: LOOP
|
|
||||||
SET vDone = FALSE;
|
|
||||||
FETCH vTickets INTO vId;
|
|
||||||
|
|
||||||
IF vDone THEN
|
|
||||||
LEAVE saleLoop;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
CALL buyOut_refreshSale('ticket', vId);
|
|
||||||
END LOOP;
|
|
||||||
CLOSE vTickets;
|
|
||||||
|
|
||||||
-- Synchronize
|
|
||||||
|
|
||||||
UPDATE buyOut SET isSync = TRUE;
|
|
||||||
CALL stock_sync;
|
|
||||||
|
|
||||||
DO RELEASE_LOCK('stock.stock_refreshAll');
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,34 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`stock_sync`()
|
|
||||||
BEGIN
|
|
||||||
/**
|
|
||||||
* Synchronizes all out of sync items. It can be called in parallel
|
|
||||||
* since it generates a lock for each item (and warehouse) synchronization
|
|
||||||
* process, see stock_syncItem().
|
|
||||||
*/
|
|
||||||
DECLARE vDone BOOL;
|
|
||||||
DECLARE vWarehouseFk INT;
|
|
||||||
DECLARE vItemFk INT;
|
|
||||||
|
|
||||||
DECLARE vItems CURSOR FOR
|
|
||||||
SELECT itemFk, warehouseFk FROM buyLot WHERE NOT isSync
|
|
||||||
UNION
|
|
||||||
SELECT itemFk, warehouseFk FROM buyOut WHERE NOT isSync;
|
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
||||||
SET vDone = TRUE;
|
|
||||||
|
|
||||||
OPEN vItems;
|
|
||||||
itemLoop: LOOP
|
|
||||||
SET vDone = FALSE;
|
|
||||||
FETCH vItems INTO vItemFk, vWarehouseFk;
|
|
||||||
|
|
||||||
IF vDone THEN
|
|
||||||
LEAVE itemLoop;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
CALL stock_syncItem(vItemFk, vWarehouseFk, 0);
|
|
||||||
END LOOP;
|
|
||||||
CLOSE vItems;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -1,88 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`stock_syncItem`(
|
|
||||||
vItemFk INT,
|
|
||||||
vWarehouseFk INT,
|
|
||||||
vWait INT)
|
|
||||||
myProc: BEGIN
|
|
||||||
/**
|
|
||||||
* Synchronizes out of sync item. It generates a lock for each item and
|
|
||||||
* warehouse synchronization process.
|
|
||||||
*
|
|
||||||
* @param vItemFk The item id
|
|
||||||
* @param vWarehouseFk The item warehouse id
|
|
||||||
* @param vWait Maximum waiting time, see GET_LOCK()
|
|
||||||
*/
|
|
||||||
DECLARE vDone BOOL;
|
|
||||||
DECLARE vHasPendingSync BOOL;
|
|
||||||
DECLARE vLotFk INT;
|
|
||||||
DECLARE vOutFk INT;
|
|
||||||
DECLARE vLock VARCHAR(255);
|
|
||||||
|
|
||||||
DECLARE vLots CURSOR FOR
|
|
||||||
SELECT lotFk FROM buyLot
|
|
||||||
WHERE NOT isSync
|
|
||||||
AND (itemFk, warehouseFk) = (vItemFk, vWarehouseFk)
|
|
||||||
ORDER BY dated, lotFk;
|
|
||||||
|
|
||||||
DECLARE vOuts CURSOR FOR
|
|
||||||
SELECT outFk FROM buyOut
|
|
||||||
WHERE NOT isSync
|
|
||||||
AND (itemFk, warehouseFk) = (vItemFk, vWarehouseFk)
|
|
||||||
ORDER BY dated, created, outFk;
|
|
||||||
|
|
||||||
DECLARE CONTINUE HANDLER FOR NOT FOUND
|
|
||||||
SET vDone = TRUE;
|
|
||||||
|
|
||||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
|
||||||
BEGIN
|
|
||||||
DO RELEASE_LOCK(vLock);
|
|
||||||
ROLLBACK;
|
|
||||||
RESIGNAL;
|
|
||||||
END;
|
|
||||||
|
|
||||||
SET vLock = CONCAT_WS('/', 'stock.stock_syncItem', vWarehouseFk, vItemFk);
|
|
||||||
|
|
||||||
IF NOT GET_LOCK(vLock, vWait) THEN
|
|
||||||
LEAVE myProc;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
REPEAT
|
|
||||||
SET vHasPendingSync = FALSE;
|
|
||||||
|
|
||||||
OPEN vLots;
|
|
||||||
lotLoop: LOOP
|
|
||||||
SET vDone = FALSE;
|
|
||||||
FETCH vLots INTO vLotFk;
|
|
||||||
|
|
||||||
IF vDone THEN
|
|
||||||
LEAVE lotLoop;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
START TRANSACTION;
|
|
||||||
CALL buyLot_sync(vLotFk);
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
SET vHasPendingSync = TRUE;
|
|
||||||
END LOOP;
|
|
||||||
CLOSE vLots;
|
|
||||||
|
|
||||||
OPEN vOuts;
|
|
||||||
outLoop: LOOP
|
|
||||||
SET vDone = FALSE;
|
|
||||||
FETCH vOuts INTO vOutFk;
|
|
||||||
|
|
||||||
IF vDone THEN
|
|
||||||
LEAVE outLoop;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
START TRANSACTION;
|
|
||||||
CALL buyOut_sync(vOutFk);
|
|
||||||
COMMIT;
|
|
||||||
|
|
||||||
SET vHasPendingSync = TRUE;
|
|
||||||
END LOOP;
|
|
||||||
CLOSE vOuts;
|
|
||||||
|
|
||||||
UNTIL NOT vHasPendingSync END REPEAT;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `stock`.`visible_log`(
|
||||||
|
vIsPicked BOOL,
|
||||||
|
vWarehouseFk INT,
|
||||||
|
vItemFk INT,
|
||||||
|
vQuantity INT
|
||||||
|
)
|
||||||
|
proc: BEGIN
|
||||||
|
IF !vIsPicked THEN
|
||||||
|
LEAVE proc;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
INSERT INTO visible
|
||||||
|
SET itemFk = vItemFk,
|
||||||
|
warehouseFk = vWarehouseFk,
|
||||||
|
quantity = vQuantity
|
||||||
|
ON DUPLICATE KEY UPDATE
|
||||||
|
quantity = quantity + VALUES(quantity);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,22 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `stock`.`inbound_afterDelete`
|
||||||
|
AFTER DELETE ON `inbound`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
UPDATE outbound o
|
||||||
|
JOIN inboundPick ou ON ou.outboundFk = o.id
|
||||||
|
SET o.lack = o.lack + ou.quantity,
|
||||||
|
o.isSync = FALSE
|
||||||
|
WHERE ou.inboundFk = OLD.id;
|
||||||
|
|
||||||
|
DELETE FROM inboundPick
|
||||||
|
WHERE inboundFk = OLD.id;
|
||||||
|
|
||||||
|
CALL visible_log(
|
||||||
|
OLD.isPicked,
|
||||||
|
OLD.warehouseFk,
|
||||||
|
OLD.itemFk,
|
||||||
|
-OLD.quantity
|
||||||
|
);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,15 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `stock`.`inbound_beforeInsert`
|
||||||
|
BEFORE INSERT ON `inbound`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
|
||||||
|
|
||||||
|
CALL visible_log(
|
||||||
|
NEW.isPicked,
|
||||||
|
NEW.warehouseFk,
|
||||||
|
NEW.itemFk,
|
||||||
|
NEW.quantity
|
||||||
|
);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,22 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `stock`.`outbound_afterDelete`
|
||||||
|
AFTER DELETE ON `outbound`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
UPDATE inbound i
|
||||||
|
JOIN inboundPick ou ON ou.inboundFk = i.id
|
||||||
|
SET i.available = i.available + ou.quantity,
|
||||||
|
i.isSync = FALSE
|
||||||
|
WHERE ou.outboundFk = OLD.id;
|
||||||
|
|
||||||
|
DELETE FROM inboundPick
|
||||||
|
WHERE outboundFk = OLD.id;
|
||||||
|
|
||||||
|
CALL visible_log(
|
||||||
|
OLD.isPicked,
|
||||||
|
OLD.warehouseFk,
|
||||||
|
OLD.itemFk,
|
||||||
|
OLD.quantity
|
||||||
|
);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -0,0 +1,16 @@
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` TRIGGER `stock`.`outbound_beforeInsert`
|
||||||
|
BEFORE INSERT ON `outbound`
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
SET NEW.lack = NEW.quantity;
|
||||||
|
SET NEW.isPicked = NEW.isPicked OR NEW.dated < util.VN_CURDATE();
|
||||||
|
|
||||||
|
CALL visible_log(
|
||||||
|
NEW.isPicked,
|
||||||
|
NEW.warehouseFk,
|
||||||
|
NEW.itemFk,
|
||||||
|
-NEW.quantity
|
||||||
|
);
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
|
@ -1,15 +0,0 @@
|
||||||
DELIMITER $$
|
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`item_getLife`(vItemFk INT)
|
|
||||||
RETURNS INT
|
|
||||||
NOT DETERMINISTIC
|
|
||||||
BEGIN
|
|
||||||
DECLARE vLife INT;
|
|
||||||
|
|
||||||
SELECT t.life INTO vLife
|
|
||||||
FROM itemType t
|
|
||||||
JOIN item i ON i.typeFk = t.id
|
|
||||||
WHERE i.id = vItemFk;
|
|
||||||
|
|
||||||
RETURN vLife;
|
|
||||||
END$$
|
|
||||||
DELIMITER ;
|
|
|
@ -104,24 +104,6 @@ BEGIN
|
||||||
LEFT JOIN agencyModeItemType ait
|
LEFT JOIN agencyModeItemType ait
|
||||||
ON ait.agencyModeFk = vAgencyModeFk
|
ON ait.agencyModeFk = vAgencyModeFk
|
||||||
AND ait.itemTypeFk = itt.id
|
AND ait.itemTypeFk = itt.id
|
||||||
LEFT JOIN (
|
|
||||||
SELECT i.id
|
|
||||||
FROM item i
|
|
||||||
JOIN priceDelta pd
|
|
||||||
ON pd.itemTypeFk = i.typeFk
|
|
||||||
AND (pd.minSize IS NULL OR pd.minSize <= i.`size`)
|
|
||||||
AND (pd.maxSize IS NULL OR pd.maxSize >= i.`size`)
|
|
||||||
AND (pd.inkFk IS NULL OR pd.inkFk = i.inkFk)
|
|
||||||
AND (pd.originFk IS NULL OR pd.originFk = i.originFk)
|
|
||||||
AND (pd.producerFk IS NULL OR pd.producerFk = i.producerFk)
|
|
||||||
AND (pd.warehouseFk IS NULL OR pd.warehouseFk = vWarehouseFk)
|
|
||||||
LEFT JOIN zoneGeo zg ON zg.id = pd.zoneGeoFk
|
|
||||||
LEFT JOIN zoneGeo zg2 ON zg2.id = address_getGeo(vAddressFk)
|
|
||||||
WHERE (pd.fromDated IS NULL OR pd.fromDated <= vShipped)
|
|
||||||
AND (pd.toDated IS NULL OR pd.toDated >= vShipped)
|
|
||||||
AND (pd.zoneGeoFk IS NULL OR zg2.lft BETWEEN zg.lft AND zg.rgt)
|
|
||||||
AND pd.isHidden
|
|
||||||
GROUP BY i.id) pd ON pd.id = i.itemFk
|
|
||||||
WHERE a.calc_id = vAvailableCalc
|
WHERE a.calc_id = vAvailableCalc
|
||||||
AND a.available > 0
|
AND a.available > 0
|
||||||
AND (ag.isAnyVolumeAllowed OR NOT itt.isUnconventionalSize)
|
AND (ag.isAnyVolumeAllowed OR NOT itt.isUnconventionalSize)
|
||||||
|
@ -131,8 +113,7 @@ BEGIN
|
||||||
it.size <= z.itemMaxSize OR z.itemMaxSize IS NULL))
|
it.size <= z.itemMaxSize OR z.itemMaxSize IS NULL))
|
||||||
AND cit.id IS NULL
|
AND cit.id IS NULL
|
||||||
AND zit.id IS NULL
|
AND zit.id IS NULL
|
||||||
AND ait.id IS NULL
|
AND ait.id IS NULL;
|
||||||
AND pd.id IS NULL;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tmp.buyUltimate;
|
DROP TEMPORARY TABLE tmp.buyUltimate;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getAtp`(vAvailabled DATETIME)
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getAtp`(vDated DATE)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Calcula el valor mínimo acumulado para cada artículo por almacén.
|
* Calcula el valor mínimo acumulado para cada artículo ordenado por fecha y
|
||||||
|
* almacén.
|
||||||
*
|
*
|
||||||
* @param vAvailabled Starting time for calculation
|
* @param vDated Si no hay movimientos en la fecha indicada, debe devolver 0
|
||||||
* @table tmp.itemCalc(itemFk, wareHouseFk, dated, quantity)
|
* @table tmp.itemCalc(itemFk, wareHouseFk, dated, quantity)
|
||||||
* @return tmp.itemAtp(itemFk, warehouseFk, quantity)
|
* @return tmp.itemAtp(itemFk, warehouseFk, quantity)
|
||||||
*/
|
*/
|
||||||
|
@ -16,7 +17,7 @@ BEGIN
|
||||||
SELECT itemFk, warehouseFk, dated, quantity
|
SELECT itemFk, warehouseFk, dated, quantity
|
||||||
FROM tmp.itemCalc
|
FROM tmp.itemCalc
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT itemFk, warehouseFk, vAvailabled, 0
|
SELECT itemFk, warehouseFk, vDated, 0
|
||||||
FROM (SELECT DISTINCT itemFk, warehouseFk FROM tmp.itemCalc) t2
|
FROM (SELECT DISTINCT itemFk, warehouseFk FROM tmp.itemCalc) t2
|
||||||
) t1
|
) t1
|
||||||
GROUP BY itemFk, warehouseFk, dated
|
GROUP BY itemFk, warehouseFk, dated
|
||||||
|
@ -27,7 +28,7 @@ BEGIN
|
||||||
SET @lastQuantity := 0;
|
SET @lastQuantity := 0;
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemAtp
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemAtp
|
||||||
(PRIMARY KEY (itemFk, wareHouseFk))
|
(INDEX (itemFk, wareHouseFk))
|
||||||
SELECT itemFk, wareHouseFk, MIN(quantityAccumulated) quantity
|
SELECT itemFk, wareHouseFk, MIN(quantityAccumulated) quantity
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
|
@ -42,10 +43,6 @@ BEGIN
|
||||||
)sub
|
)sub
|
||||||
GROUP BY itemFk, wareHouseFk;
|
GROUP BY itemFk, wareHouseFk;
|
||||||
|
|
||||||
INSERT IGNORE INTO tmp.itemAtp(itemFk, warehouseFk, quantity)
|
|
||||||
SELECT DISTINCT ic.itemFk, ic.warehouseFk, 0
|
|
||||||
FROM tmp.itemCalc ic;
|
|
||||||
|
|
||||||
DROP TEMPORARY TABLE tItemOrdered;
|
DROP TEMPORARY TABLE tItemOrdered;
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -99,7 +99,7 @@ BEGIN
|
||||||
),
|
),
|
||||||
sales AS (
|
sales AS (
|
||||||
WITH itemSales AS (
|
WITH itemSales AS (
|
||||||
SELECT DATE(t.shipped) + INTERVAL HOUR(IFNULL(z.`hour`,0)) HOUR shipped,
|
SELECT DATE(t.shipped) + INTERVAL HOUR(z.`hour`) HOUR shipped,
|
||||||
s.quantity,
|
s.quantity,
|
||||||
st2.alertLevel,
|
st2.alertLevel,
|
||||||
st2.name,
|
st2.name,
|
||||||
|
@ -114,7 +114,7 @@ BEGIN
|
||||||
cb.claimFk
|
cb.claimFk
|
||||||
FROM vn.sale s
|
FROM vn.sale s
|
||||||
JOIN vn.ticket t ON t.id = s.ticketFk
|
JOIN vn.ticket t ON t.id = s.ticketFk
|
||||||
LEFT JOIN vn.`zone` z ON z.id = t.zoneFk
|
JOIN vn.`zone` z ON z.id = t.zoneFk
|
||||||
LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id
|
LEFT JOIN vn.ticketState ts ON ts.ticketFk = t.id
|
||||||
LEFT JOIN vn.state st ON st.code = ts.code
|
LEFT JOIN vn.state st ON st.code = ts.code
|
||||||
JOIN vn.client c ON c.id = t.clientFk
|
JOIN vn.client c ON c.id = t.clientFk
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getMinacum`(
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getMinacum`(
|
||||||
vWarehouseFk TINYINT,
|
vWarehouseFk TINYINT,
|
||||||
vAvailabled DATETIME,
|
vDated DATE,
|
||||||
vRange INT,
|
vRange INT,
|
||||||
vItemFk INT
|
vItemFk INT
|
||||||
)
|
)
|
||||||
|
@ -11,12 +11,11 @@ BEGIN
|
||||||
* especificado, en caso de NULL para todos.
|
* especificado, en caso de NULL para todos.
|
||||||
*
|
*
|
||||||
* @param vWarehouseFk Id warehouse
|
* @param vWarehouseFk Id warehouse
|
||||||
* @param vAvailabled Fecha inicio
|
* @param vDated Fecha inicio
|
||||||
* @param vRange Número de días a considerar
|
* @param vRange Número de días a considerar
|
||||||
* @param vItemFk Id de artículo
|
* @param vItemFk Id de artículo
|
||||||
* @return tmp.itemMinacum
|
* @return tmp.itemMinacum
|
||||||
*/
|
*/
|
||||||
DECLARE vDated DATE DEFAULT DATE(vAvailabled);
|
|
||||||
DECLARE vDatedTo DATETIME DEFAULT util.dayEnd(vDated + INTERVAL vRange DAY);
|
DECLARE vDatedTo DATETIME DEFAULT util.dayEnd(vDated + INTERVAL vRange DAY);
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemCalc
|
||||||
|
@ -28,25 +27,25 @@ BEGIN
|
||||||
sub.warehouseFk
|
sub.warehouseFk
|
||||||
FROM (
|
FROM (
|
||||||
SELECT s.itemFk,
|
SELECT s.itemFk,
|
||||||
t.shipped dated,
|
DATE(t.shipped) dated,
|
||||||
-s.quantity quantity,
|
-s.quantity quantity,
|
||||||
t.warehouseFk
|
t.warehouseFk
|
||||||
FROM sale s
|
FROM sale s
|
||||||
JOIN ticket t ON t.id = s.ticketFk
|
JOIN ticket t ON t.id = s.ticketFk
|
||||||
WHERE t.shipped BETWEEN vAvailabled AND vDatedTo
|
WHERE t.shipped BETWEEN vDated AND vDatedTo
|
||||||
AND t.warehouseFk
|
AND t.warehouseFk
|
||||||
AND s.quantity <> 0
|
AND s.quantity <> 0
|
||||||
AND (vItemFk IS NULL OR s.itemFk = vItemFk)
|
AND (vItemFk IS NULL OR s.itemFk = vItemFk)
|
||||||
AND (vWarehouseFk IS NULL OR t.warehouseFk = vWarehouseFk)
|
AND (vWarehouseFk IS NULL OR t.warehouseFk = vWarehouseFk)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT b.itemFk,
|
SELECT b.itemFk,
|
||||||
t.availabled,
|
t.landed,
|
||||||
b.quantity,
|
b.quantity,
|
||||||
t.warehouseInFk
|
t.warehouseInFk
|
||||||
FROM buy b
|
FROM buy b
|
||||||
JOIN entry e ON e.id = b.entryFk
|
JOIN entry e ON e.id = b.entryFk
|
||||||
JOIN travel t ON t.id = e.travelFk
|
JOIN travel t ON t.id = e.travelFk
|
||||||
WHERE t.availabled BETWEEN vAvailabled AND vDatedTo
|
WHERE t.landed BETWEEN vDated AND vDatedTo
|
||||||
AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
|
AND (vWarehouseFk IS NULL OR t.warehouseInFk = vWarehouseFk)
|
||||||
AND NOT e.isExcludedFromAvailable
|
AND NOT e.isExcludedFromAvailable
|
||||||
AND b.quantity <> 0
|
AND b.quantity <> 0
|
||||||
|
@ -59,7 +58,7 @@ BEGIN
|
||||||
FROM buy b
|
FROM buy b
|
||||||
JOIN entry e ON e.id = b.entryFk
|
JOIN entry e ON e.id = b.entryFk
|
||||||
JOIN travel t ON t.id = e.travelFk
|
JOIN travel t ON t.id = e.travelFk
|
||||||
WHERE t.shipped BETWEEN vAvailabled AND vDatedTo
|
WHERE t.shipped BETWEEN vDated AND vDatedTo
|
||||||
AND (vWarehouseFk IS NULL OR t.warehouseOutFk = vWarehouseFk)
|
AND (vWarehouseFk IS NULL OR t.warehouseOutFk = vWarehouseFk)
|
||||||
AND NOT e.isExcludedFromAvailable
|
AND NOT e.isExcludedFromAvailable
|
||||||
AND b.quantity <> 0
|
AND b.quantity <> 0
|
||||||
|
@ -85,7 +84,7 @@ BEGIN
|
||||||
) sub
|
) sub
|
||||||
GROUP BY sub.itemFk, sub.warehouseFk, sub.dated;
|
GROUP BY sub.itemFk, sub.warehouseFk, sub.dated;
|
||||||
|
|
||||||
CALL item_getAtp(vAvailabled);
|
CALL item_getAtp(vDated);
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemMinacum
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemMinacum
|
||||||
(INDEX(itemFk))
|
(INDEX(itemFk))
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getStock`(
|
CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`item_getStock`(
|
||||||
vWarehouseFk SMALLINT,
|
vWarehouseFk SMALLINT,
|
||||||
vAvailabled DATETIME,
|
vDated DATE,
|
||||||
vItemFk INT
|
vItemFk INT
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Calcula el stock de un artículo de un vWarehouseFk,
|
* Calcula el stock de un artículo de un vWarehouseFk,
|
||||||
* desde la fecha del inventario hasta el momento anterior a vAvailabled
|
* desde la fecha del inventario hasta vDated
|
||||||
*
|
*
|
||||||
* @param vWarehouse Warehouse id
|
* @param vWarehouse Warehouse id
|
||||||
* @param vAvailabled Maximum time to filter
|
* @param vDated Max date to filter
|
||||||
* @param vItemFk Item id
|
* @param vItemFk Item id
|
||||||
*
|
*
|
||||||
* @return tmp.itemList(itemFk, stock, visible, available)
|
* @return tmp.itemList(itemFk, stock, visible, available)
|
||||||
*/
|
*/
|
||||||
CALL cache.stock_refresh(FALSE);
|
SET vDated = TIMESTAMP(vDated, '00:00:00');
|
||||||
|
|
||||||
CREATE OR REPLACE TEMPORARY TABLE tmp.itemList
|
CREATE OR REPLACE TEMPORARY TABLE tmp.itemList
|
||||||
(UNIQUE INDEX i USING HASH (itemFk))
|
(UNIQUE INDEX i USING HASH (itemFk))
|
||||||
|
@ -28,15 +28,15 @@ BEGIN
|
||||||
SELECT itemFk, quantity
|
SELECT itemFk, quantity
|
||||||
FROM itemTicketOut
|
FROM itemTicketOut
|
||||||
WHERE shipped >= util.VN_CURDATE()
|
WHERE shipped >= util.VN_CURDATE()
|
||||||
AND shipped < vAvailabled
|
AND shipped < vDated
|
||||||
AND warehouseFk = vWarehouseFk
|
AND warehouseFk = vWarehouseFk
|
||||||
AND (vItemFk IS NULL OR itemFk = vItemFk)
|
AND (vItemFk IS NULL OR itemFk = vItemFk)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT iei.itemFk, iei.quantity
|
SELECT iei.itemFk, iei.quantity
|
||||||
FROM itemEntryIn iei
|
FROM itemEntryIn iei
|
||||||
JOIN item i ON i.id = iei.itemFk
|
JOIN item i ON i.id = iei.itemFk
|
||||||
WHERE iei.availabled >= util.VN_CURDATE()
|
WHERE IFNULL(iei.availabled, iei.landed) >= util.VN_CURDATE()
|
||||||
AND iei.availabled < vAvailabled
|
AND IFNULL(iei.availabled, iei.landed) < vDated
|
||||||
AND iei.warehouseInFk = vWarehouseFk
|
AND iei.warehouseInFk = vWarehouseFk
|
||||||
AND (vItemFk IS NULL OR iei.itemFk = vItemFk)
|
AND (vItemFk IS NULL OR iei.itemFk = vItemFk)
|
||||||
UNION ALL
|
UNION ALL
|
||||||
|
@ -44,16 +44,23 @@ BEGIN
|
||||||
FROM itemEntryOut ieo
|
FROM itemEntryOut ieo
|
||||||
JOIN item i ON i.id = ieo.itemFk
|
JOIN item i ON i.id = ieo.itemFk
|
||||||
WHERE ieo.shipped >= util.VN_CURDATE()
|
WHERE ieo.shipped >= util.VN_CURDATE()
|
||||||
AND ieo.shipped < vAvailabled
|
AND ieo.shipped < vDated
|
||||||
AND ieo.warehouseOutFk = vWarehouseFk
|
AND ieo.warehouseOutFk = vWarehouseFk
|
||||||
AND (vItemFk IS NULL OR ieo.itemFk = vItemFk)
|
AND (vItemFk IS NULL OR ieo.itemFk = vItemFk)
|
||||||
UNION ALL
|
|
||||||
SELECT item_id, amount
|
|
||||||
FROM cache.stock
|
|
||||||
WHERE warehouse_id = vWarehouseFk
|
|
||||||
) sub
|
) sub
|
||||||
GROUP BY itemFk
|
GROUP BY itemFk
|
||||||
HAVING stock;
|
HAVING stock;
|
||||||
|
|
||||||
|
CALL cache.stock_refresh(FALSE);
|
||||||
|
|
||||||
|
INSERT INTO tmp.itemList(itemFk, stock, visible, available)
|
||||||
|
SELECT item_id, amount, amount, amount
|
||||||
|
FROM cache.stock
|
||||||
|
WHERE warehouse_id = vWarehouseFk
|
||||||
|
AND (vItemFk IS NULL OR vItemFk = item_id)
|
||||||
|
ON DUPLICATE KEY UPDATE
|
||||||
|
stock = stock + VALUES(stock),
|
||||||
|
visible = visible + VALUES(visible),
|
||||||
|
available = available + VALUES(available);
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -6,7 +6,7 @@ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`ticket_getMovable`(
|
||||||
)
|
)
|
||||||
BEGIN
|
BEGIN
|
||||||
/**
|
/**
|
||||||
* Cálcula el stock que se puede adelantar para los artículos de un ticket.
|
* Cálcula el stock movible para los artículos de un ticket
|
||||||
* vNewShipped debe ser menor que vOldShipped, en los otros casos se
|
* vNewShipped debe ser menor que vOldShipped, en los otros casos se
|
||||||
* asume que siempre es posible
|
* asume que siempre es posible
|
||||||
*
|
*
|
||||||
|
@ -25,7 +25,7 @@ BEGIN
|
||||||
CALL item_getMinacum(
|
CALL item_getMinacum(
|
||||||
vWarehouseFk,
|
vWarehouseFk,
|
||||||
vNewShipped,
|
vNewShipped,
|
||||||
DATEDIFF(DATE_SUB(vOldShipped, INTERVAL 1 DAY), DATE(vNewShipped)),
|
DATEDIFF(DATE_SUB(vOldShipped, INTERVAL 1 DAY), vNewShipped),
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,6 @@ trig: BEGIN
|
||||||
|
|
||||||
SET NEW.editorFk = account.myUser_getId();
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
|
|
||||||
IF NEW.life IS NULL THEN
|
|
||||||
SET NEW.life = item_getLife(NEW.itemFk);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SELECT it.workerFk INTO vBuyerFk
|
SELECT it.workerFk INTO vBuyerFk
|
||||||
FROM item i
|
FROM item i
|
||||||
JOIN itemType it ON it.id = i.typeFk
|
JOIN itemType it ON it.id = i.typeFk
|
||||||
|
|
|
@ -25,10 +25,6 @@ trig:BEGIN
|
||||||
|
|
||||||
SET NEW.editorFk = account.myUser_getId();
|
SET NEW.editorFk = account.myUser_getId();
|
||||||
|
|
||||||
IF NOT (NEW.itemFk <=> OLD.itemFk) AND NEW.life <=> OLD.life THEN
|
|
||||||
SET NEW.life = item_getLife(NEW.itemFk);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SELECT defaultEntry INTO vDefaultEntry
|
SELECT defaultEntry INTO vDefaultEntry
|
||||||
FROM entryConfig;
|
FROM entryConfig;
|
||||||
|
|
||||||
|
|
|
@ -17,14 +17,8 @@ BEGIN
|
||||||
CALL travel_throwAwb(NEW.id);
|
CALL travel_throwAwb(NEW.id);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF NEW.availabled IS NULL THEN
|
|
||||||
SET NEW.availabled = NEW.landed;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
IF NEW.availabled < NEW.landed THEN
|
IF NEW.availabled < NEW.landed THEN
|
||||||
CALL util.throw('The travel availabled cannot be earlier than landed');
|
CALL util.throw('The travel availabled cannot be earlier than landed');
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -41,14 +41,8 @@ BEGIN
|
||||||
CALL travel_throwAwb(NEW.id);
|
CALL travel_throwAwb(NEW.id);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF NEW.availabled IS NULL THEN
|
|
||||||
SET NEW.availabled = NEW.landed;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
IF NEW.availabled < NEW.landed THEN
|
IF NEW.availabled < NEW.landed THEN
|
||||||
CALL util.throw('The travel availabled cannot be earlier than landed');
|
CALL util.throw('The travel availabled cannot be earlier than landed');
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
|
||||||
END$$
|
END$$
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
|
|
|
@ -31,8 +31,7 @@ AS SELECT `e`.`gestDocFk` AS `gestdoc_id`,
|
||||||
`e`.`invoiceAmount` AS `invoiceAmount`,
|
`e`.`invoiceAmount` AS `invoiceAmount`,
|
||||||
`w`.`code` AS `buyerCode`,
|
`w`.`code` AS `buyerCode`,
|
||||||
`e`.`typeFk` AS `typeFk`,
|
`e`.`typeFk` AS `typeFk`,
|
||||||
`w3`.`code` AS `observationWorkerCode`,
|
`w3`.`code` AS `observationWorkerCode`
|
||||||
`tr`.`availabled`
|
|
||||||
FROM (
|
FROM (
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
DROP TABLE stock.log;
|
|
|
@ -1,16 +0,0 @@
|
||||||
DROP TABLE IF EXISTS stock.inboundPick;
|
|
||||||
|
|
||||||
CREATE TABLE stock.buyPick (
|
|
||||||
id INT UNSIGNED auto_increment NOT NULL,
|
|
||||||
lotFk INT(11) NOT NULL
|
|
||||||
COMMENT 'Buy id',
|
|
||||||
outFk INT(11) NOT NULL
|
|
||||||
COMMENT 'Out id',
|
|
||||||
quantity INT UNSIGNED NOT NULL
|
|
||||||
COMMENT 'Picked quantity',
|
|
||||||
PRIMARY KEY (id),
|
|
||||||
CONSTRAINT buyPick_unique UNIQUE KEY (lotFk, outFk)
|
|
||||||
)
|
|
||||||
ENGINE=InnoDB
|
|
||||||
DEFAULT CHARSET=utf8mb3
|
|
||||||
COLLATE=utf8mb3_unicode_ci;
|
|
|
@ -1,6 +0,0 @@
|
||||||
ALTER TABLE vn.buy
|
|
||||||
ADD life INT UNSIGNED NULL
|
|
||||||
COMMENT 'Lot life expressed in days',
|
|
||||||
ADD isAlive BOOL NOT NULL DEFAULT TRUE
|
|
||||||
COMMENT 'Whether it is alive',
|
|
||||||
ADD INDEX(isAlive);
|
|
|
@ -1,4 +0,0 @@
|
||||||
ALTER TABLE hedera.orderRow
|
|
||||||
ADD isReserved BOOL NOT NULL DEFAULT TRUE
|
|
||||||
COMMENT 'Whether has an available reservation',
|
|
||||||
ADD INDEX(isReserved);
|
|
|
@ -1,4 +0,0 @@
|
||||||
ALTER TABLE vn.ticket
|
|
||||||
ADD isAlive BOOL NOT NULL DEFAULT TRUE
|
|
||||||
COMMENT 'Whether it is alive',
|
|
||||||
ADD INDEX(isAlive);
|
|
|
@ -1,10 +0,0 @@
|
||||||
RENAME TABLE IF EXISTS stock.inbound TO stock.buyLot;
|
|
||||||
|
|
||||||
ALTER TABLE stock.buyLot
|
|
||||||
DROP KEY source,
|
|
||||||
DROP COLUMN tableName,
|
|
||||||
CHANGE tableId lotFk int(10) unsigned NOT NULL,
|
|
||||||
CHANGE isSync isSync tinyint(4) NOT NULL AFTER lotFk,
|
|
||||||
DROP PRIMARY KEY,
|
|
||||||
DROP COLUMN id,
|
|
||||||
ADD PRIMARY KEY (lotFk);
|
|
|
@ -1 +0,0 @@
|
||||||
DROP TABLE stock.visible;
|
|
|
@ -1,10 +0,0 @@
|
||||||
RENAME TABLE IF EXISTS stock.outbound TO stock.buyOut;
|
|
||||||
|
|
||||||
ALTER TABLE stock.buyOut
|
|
||||||
CHANGE IF EXISTS tableName source enum('buy','sale','orderRow') CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
|
|
||||||
CHANGE IF EXISTS id outFk int(10) UNSIGNED NOT NULL,
|
|
||||||
DROP INDEX IF EXISTS source,
|
|
||||||
DROP COLUMN IF EXISTS tableId,
|
|
||||||
DROP INDEX IF EXISTS expired,
|
|
||||||
DROP COLUMN IF EXISTS expired,
|
|
||||||
ADD INDEX IF NOT EXISTS (source);
|
|
|
@ -1,8 +0,0 @@
|
||||||
CREATE TABLE stock.config (
|
|
||||||
id INT UNSIGNED auto_increment NOT NULL,
|
|
||||||
saleLife INT UNSIGNED NOT NULL COMMENT 'Maximum sales cache lifetime in days',
|
|
||||||
CONSTRAINT config_pk PRIMARY KEY (id)
|
|
||||||
)
|
|
||||||
ENGINE=InnoDB
|
|
||||||
DEFAULT CHARSET=utf8mb3
|
|
||||||
COLLATE=utf8mb3_general_ci;
|
|
|
@ -1,2 +0,0 @@
|
||||||
INSERT INTO stock.config (id, saleLife)
|
|
||||||
VALUES (1, 90);
|
|
|
@ -1 +0,0 @@
|
||||||
CREATE SEQUENCE IF NOT EXISTS vn.buyLot;
|
|
|
@ -1,2 +0,0 @@
|
||||||
ALTER TABLE vn.sale
|
|
||||||
ADD COLUMN IF NOT EXISTS lotFk INT UNSIGNED NOT NULL DEFAULT nextval(vn.buyLot) AFTER id;
|
|
|
@ -1,2 +0,0 @@
|
||||||
ALTER TABLE hedera.orderRow
|
|
||||||
ADD COLUMN IF NOT EXISTS lotFk INT UNSIGNED NOT NULL DEFAULT nextval(vn.buyLot) AFTER id;
|
|
|
@ -1,2 +0,0 @@
|
||||||
ALTER TABLE vn.buy
|
|
||||||
ADD COLUMN IF NOT EXISTS lotFk INT UNSIGNED NOT NULL DEFAULT nextval(vn.buyLot) AFTER id;
|
|
|
@ -1,2 +0,0 @@
|
||||||
ALTER TABLE vn.sale
|
|
||||||
ADD UNIQUE IF NOT EXISTS (lotFk);
|
|
|
@ -1,2 +0,0 @@
|
||||||
ALTER TABLE hedera.orderRow
|
|
||||||
ADD UNIQUE IF NOT EXISTS (lotFk);
|
|
|
@ -1,2 +0,0 @@
|
||||||
ALTER TABLE vn.buy
|
|
||||||
ADD UNIQUE IF NOT EXISTS (lotFk);
|
|
|
@ -1,11 +0,0 @@
|
||||||
CREATE TABLE `edi`.`floricodeConfig` (
|
|
||||||
`id` int(10) unsigned NOT NULL,
|
|
||||||
`url` varchar(100) NOT NULL,
|
|
||||||
`user` varchar(50) NOT NULL,
|
|
||||||
`password` varchar(100) NOT NULL,
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
CONSTRAINT `floricodeConfig_check` CHECK (`id` = 1)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
|
|
||||||
|
|
||||||
INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
|
|
||||||
VALUES ('Edi','syncData','WRITE','ALLOW','ROLE','system');
|
|
|
@ -1,65 +0,0 @@
|
||||||
ALTER TABLE edi.tableMultiConfig
|
|
||||||
ADD `method` varchar(100) DEFAULT NULL NULL AFTER file,
|
|
||||||
DROP PRIMARY KEY,
|
|
||||||
DROP KEY to_table,
|
|
||||||
ADD id int(10) unsigned NULL FIRST;
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 1, method = 'VBN/Packaging'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='CK';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 2, method = 'VBN/PackagingType'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FB';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 3, method = 'VBN/ProductFeature'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FF';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 4, method = 'VBN/Genus'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FG';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 5, method = 'VBN/Product'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FP';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 6, method = 'VBN/RegulatoryFeatureType'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FY';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 7, method = 'VBN/ProductGroup'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FO';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 8, method = 'VBN/Plant'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FT';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 9, method = 'VBN/Species'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FS';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 10, method = 'FEC/Company'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='CC';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 11, method = 'VBN/FeatureType'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FE';
|
|
||||||
|
|
||||||
UPDATE edi.tableMultiConfig
|
|
||||||
SET id = 12, method = 'VBN/FeatureValue'
|
|
||||||
WHERE id IS NULL
|
|
||||||
AND fileName='FV';
|
|
|
@ -1,4 +0,0 @@
|
||||||
ALTER TABLE edi.tableMultiConfig
|
|
||||||
ADD CONSTRAINT tableMultiConfig_pk PRIMARY KEY (id),
|
|
||||||
MODIFY COLUMN id int(10) unsigned auto_increment NOT NULL,
|
|
||||||
ADD CONSTRAINT tableMultiConfig_unique UNIQUE KEY (toTable);
|
|
|
@ -1,3 +0,0 @@
|
||||||
ALTER TABLE vn.priceDelta ADD IF NOT EXISTS isHidden BOOL
|
|
||||||
DEFAULT FALSE NOT NULL
|
|
||||||
COMMENT 'Hides the itemType when building de catalog recordset';
|
|
|
@ -1,4 +0,0 @@
|
||||||
-- Place your SQL code here
|
|
||||||
ALTER TABLE vn.priceDelta ADD IF NOT EXISTS isHidden BOOL
|
|
||||||
DEFAULT FALSE NOT NULL
|
|
||||||
COMMENT 'Hides the itemType when building de catalog recordset';
|
|
|
@ -1,4 +0,0 @@
|
||||||
-- Place your SQL code here
|
|
||||||
ALTER TABLE vn.priceDelta ADD IF NOT EXISTS isHidden BOOL
|
|
||||||
DEFAULT FALSE NOT NULL
|
|
||||||
COMMENT 'Hides the itemType when building de catalog recordset';
|
|
|
@ -1,3 +0,0 @@
|
||||||
-- Place your SQL code here
|
|
||||||
INSERT INTO salix.ACL (model,property,accessType,permission,principalType,principalId)
|
|
||||||
VALUES ('SaleGroupDetail','find','READ','ALLOW','ROLE','employee');
|
|
|
@ -1,2 +0,0 @@
|
||||||
ALTER TABLE cache.last_buy
|
|
||||||
DROP FOREIGN KEY IF EXISTS last_buy_FK_1;
|
|
|
@ -1,6 +0,0 @@
|
||||||
-- Place your SQL code here
|
|
||||||
UPDATE vn.travel
|
|
||||||
SET availabled = landed
|
|
||||||
WHERE availabled IS NULL;
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
|
||||||
|
const {Report} = require('vn-print');
|
||||||
|
|
||||||
module.exports = Self => {
|
module.exports = Self => {
|
||||||
Self.remoteMethod('status', {
|
Self.remoteMethod('status', {
|
||||||
description: 'Gets the backend status',
|
description: 'Gets the backend status',
|
||||||
|
@ -14,6 +16,7 @@ module.exports = Self => {
|
||||||
|
|
||||||
Self.status = async() => {
|
Self.status = async() => {
|
||||||
await Self.rawSql(`SELECT TRUE`);
|
await Self.rawSql(`SELECT TRUE`);
|
||||||
|
await new Report('application-status').toPdfStream();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -95,7 +95,6 @@ module.exports = Self => {
|
||||||
+ sat.packagePrice * SUM(t.packages) )
|
+ sat.packagePrice * SUM(t.packages) )
|
||||||
AS DECIMAL(10,2)) price,
|
AS DECIMAL(10,2)) price,
|
||||||
r.invoiceInFk,
|
r.invoiceInFk,
|
||||||
i.supplierRef,
|
|
||||||
sat.supplierFk,
|
sat.supplierFk,
|
||||||
s.name supplierName
|
s.name supplierName
|
||||||
FROM vn.route r
|
FROM vn.route r
|
||||||
|
@ -104,7 +103,6 @@ module.exports = Self => {
|
||||||
LEFT JOIN vn.ticket t ON t.routeFk = r.id
|
LEFT JOIN vn.ticket t ON t.routeFk = r.id
|
||||||
LEFT JOIN vn.supplierAgencyTerm sat ON sat.agencyFk = a.id
|
LEFT JOIN vn.supplierAgencyTerm sat ON sat.agencyFk = a.id
|
||||||
LEFT JOIN vn.supplier s ON s.id = sat.supplierFk
|
LEFT JOIN vn.supplier s ON s.id = sat.supplierFk
|
||||||
LEFT JOIN vn.invoiceIn i ON i.id = r.invoiceInFk
|
|
||||||
WHERE r.dated > DATE_ADD(?, INTERVAL -2 MONTH) AND sat.supplierFk IS NOT NULL
|
WHERE r.dated > DATE_ADD(?, INTERVAL -2 MONTH) AND sat.supplierFk IS NOT NULL
|
||||||
GROUP BY r.id
|
GROUP BY r.id
|
||||||
) a`
|
) a`
|
||||||
|
|
|
@ -167,7 +167,7 @@ module.exports = Self => {
|
||||||
}
|
}
|
||||||
|
|
||||||
smtp.send({
|
smtp.send({
|
||||||
to: 'administracion@verdnatura.es', // #8687
|
to: config.app.reportEmail,
|
||||||
subject: '[API] Nightly ticket closure report',
|
subject: '[API] Nightly ticket closure report',
|
||||||
html: body,
|
html: body,
|
||||||
}).catch(err => console.error(err));
|
}).catch(err => console.error(err));
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue