@@ -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