Skip to content

Commit 4843867

Browse files
committed
correção de liberação de estoque bruno-v1.5
1 parent f943af2 commit 4843867

2 files changed

Lines changed: 40 additions & 14 deletions

File tree

.github/workflows/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ jobs:
2626
with:
2727
context: .
2828
push: true
29-
tags: workcenterma/cloud-v2-api:bruno-v1.4
29+
tags: workcenterma/cloud-v2-api:bruno-v1.5

src/controllers/solicitacao.js

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,25 @@ class SolicitacaoController {
4242

4343
const id = uuid();
4444

45-
const {
46-
rows: [produto],
47-
} = await database.query(SQL.getDisponiveisVerify, [
45+
const { rows: produtos } = await database.query(SQL.getDisponiveisVerify, [
4846
data.UNIDADE,
4947
data.PRODUTO,
5048
]);
5149

52-
if (produto.qnt_disponivel < data.QNT_SOLICITADA) {
53-
return ResponseController(
54-
res,
55-
httpStatus.CONFLICT,
56-
T_PT.qnt_indisp +
57-
`, quantidade no armazem: ${produto.qnt_disponivel}${produto.und_medida}`,
58-
null,
59-
);
50+
if (produtos.length > 0) {
51+
var totalDisponivel = 0;
52+
for (let produto of produtos) {
53+
totalDisponivel += produto.qnt_disponivel;
54+
}
55+
if (totalDisponivel < data.QNT_SOLICITADA) {
56+
return ResponseController(
57+
res,
58+
httpStatus.CONFLICT,
59+
T_PT.qnt_indisp +
60+
`, quantidade no armazem: ${totalDisponivel}${produtos[0].und_medida}`,
61+
null,
62+
);
63+
}
6064
}
6165

6266
await database.query(SQL.createItemSolicitado, [
@@ -140,7 +144,6 @@ class SolicitacaoController {
140144
itens,
141145
});
142146
}
143-
144147
static async getSolicitacaoeComparaEstoque(req, res) {
145148
const { idSolicitacao, idEntidade } = req.params;
146149

@@ -149,14 +152,37 @@ class SolicitacaoController {
149152
[idSolicitacao],
150153
);
151154

155+
const reservadoPorEstoque = {};
156+
152157
const arrayOfEstoque = [];
153158
for await (let item of itensSolicitacao) {
154159
let { rows } = await database.query(SQL.getProdutosDisponiveis, [
155160
item.id_produto,
156161
idEntidade,
157162
]);
158163

159-
item.disponiveis = rows;
164+
let restante = item.qnt_solicitada;
165+
166+
const disponiveis = [];
167+
for (const estoque of rows) {
168+
const jaReservado = reservadoPorEstoque[estoque.id] ?? 0;
169+
const disponivelReal = estoque.qnt_disponivel - jaReservado;
170+
171+
if (disponivelReal <= 0) continue;
172+
173+
const alocar = Math.min(restante, disponivelReal);
174+
reservadoPorEstoque[estoque.id] = jaReservado + alocar;
175+
restante -= alocar;
176+
177+
disponiveis.push({
178+
...estoque,
179+
qnt_disponivel: disponivelReal,
180+
});
181+
182+
if (restante <= 0) break;
183+
}
184+
185+
item.disponiveis = disponiveis;
160186
arrayOfEstoque.push(item);
161187
}
162188

0 commit comments

Comments
 (0)