-
Notifications
You must be signed in to change notification settings - Fork 0
/
systembi.js
667 lines (484 loc) · 17 KB
/
systembi.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
/*função para bloqueio dos recursos ainda não disponibilizados*/
function default_event() {
alert('indisponivel no momento')
}
var permissão = false
var message = []
var lista_banco = [] //lista no estoque
var status_config = ''
var lista_estoque = []
var logado = false
//vamos fazer a leitura da permissaõ para liberar o recurso ou não, lembrando que de toda a forma
//o acesso não é liberado, essa configuração é apenas em termos de acessibilidade
function ispermission() {
let userName = firebase.database().ref('User_Emails');
const user = firebase.auth().currentUser;
let type = ''
userName.on('child_added', function (snapshot) {
type = snapshot.val()
if (user.email == type['email'] && (type['permission'] == 'master' || type['permission'] == 'admin')) {
permissão = true
}
});
}
function msg_negative() {
ispermission()
if (logado == false || permissão == false) {
alert('Usuário não autorizado!')
let lnk_add_new_device = document.getElementById('lnk_devices')
lnk_add_new_device.href = '#'
}
}
/*Elementos necessarios para apresentação de dados do banco*/
var span_geral = document.getElementById('conteudo_estoque').style
span_geral.display = 'none'
var span_saida = document.getElementById('conteudo_saida').style
span_saida.display = 'none'
var span_entrada = document.getElementById('conteudo_entrada').style
span_entrada.display = 'none'
var span_totais = document.getElementById('totais').style
span_totais.display = 'none'
/*variaveis que representam elementos na pagina*/
var span_estoque = document.getElementById('conteudo_estoque')
var span_exit = document.getElementById('conteudo_saida')
var span_enter = document.getElementById('conteudo_entrada')
var span_all = document.getElementById('totais')
/*Todas a configuração necessario para que o firebase funcione*/
const firebaseConfig = {
apiKey: "AIzaSyDcZJiJTmCSrvr9INI9Z9Zg5n1eSnjcSsw",
authDomain: "sbi-db.firebaseapp.com",
databaseURL: "https://sbi-db-default-rtdb.firebaseio.com",
projectId: "sbi-db",
storageBucket: "sbi-db.appspot.com",
messagingSenderId: "421227812598",
appId: "1:421227812598:web:102d334076b7ace764fed7"
};
firebase.initializeApp(firebaseConfig);
/*Fim das configurações do firebase*/
/*banco de opções de equipamento no firebase*/
var bank_equipamentos = firebase.database()
.ref('Equipamentos');
/*banco de entrada estoque no firebase*/
var bank_enter = firebase.database()
.ref('Estoque Bilhetagem Serramar');
/*banco para configurações*/
var bank_config = firebase.database()
.ref('SBI_config');
/*Fim das configurações do firebase*/
//essa função serve para dizer se o usuario está logado ou não
function islogado() {
firebase.auth().onAuthStateChanged(function (user) {
if (user) {
logado = true
} else {
//deslogado
logado = false
}
});
}
//função para escrita das configurações no banco de dados
function write_config(value) {
var newMessageRef = bank_config.push();
newMessageRef.set(
{ 'estoque': value }
);
}
//função para leitura das configuraçãoes no banco de dados
function read_config() {
let status = ''
bank_config.on('child_added', function (snapshot) {
let valor = snapshot.val()
status = valor['estoque']
});
return status
}
/*vamos fazer a leitura do que tem no banco de dados logo aqui mesmo*/
function read_to_select() {
let select = document.getElementById('eqpms')
bank_equipamentos.on('child_added', function (snapshot) {
let option = document.createElement('option')
option.text = snapshot.val();
select.appendChild(option)
});
}
function contador(classe) {
if (!logado) {
alert('Usuário não autorizado!')
} else {
span_saida.display = 'none'
/*separando os itens do banco*/
lista_banco = []
leitura_data()
let all = []
let total = [['Equipamento', 'Quantidade']]
lista_banco.forEach(eqp => {
if (eqp[4] == 'Entrada') {
all.push(eqp[0])
}
});
//conta e coloca em um objeto com nome e quantidade
var counts = {};
all.forEach(function (x) { counts[x] = (counts[x] || 0) + 1; });
for (const key in counts) {
if (counts.hasOwnProperty.call(counts, key)) {
const valor = counts[key];
total.push([key, counts[key]])
}
}
/*mudando o layout para apresentação dos totais*/
let table_total = criarTabela(total);
let tablettl_style = table_total.style
tablettl_style.textAlign = 'center'
span_all.appendChild(table_total)
let span_geral = document.getElementById('conteudo_estoque').style
span_geral.display = 'none'
estoque = document.getElementById(classe).style;//estoque
controle = document.querySelector('.formulario1').style;
estoque.display = 'block'
controle.display = 'none'
span_totais.display = 'block'
span_entrada.display = 'none'
}
}
/*Função para pegar os dados informados pelo usuario*/
function pega_data(rotina) { //se é entrada ou saida
var permissão = 0;
var select = document.getElementById("eqpms");
var maq = select.options[select.selectedIndex].text;
if (maq == '') {
permissão = 1
}
//serial
var text = document.getElementById("serial");
var ser = text.value
if (ser == '') {
permissão = 2
}
//data
var data = document.getElementById("data");
var dat = data.value;
if (dat == '') {
permissão = 3
}
//matricula
let usuarios = firebase.database().ref('User_Emails'); //nome vindo do banco
const user_loguin = firebase.auth().currentUser;//nome vindo do loguin
usuarios.on('child_added', function (snapshot) {
let dados = snapshot.val()
if (dados['email'] == user_loguin.email) {
matricula = dados['usuario']
}
});
if (matricula == '') {
permissão = 4
}
if (matricula == null) {
permissão = 5
}
switch (permissão) {
case 0:
save_equipamento(maq, ser, dat, matricula, rotina)
document.location.reload(true);
break
case 1:
alert('Escolha uma opção de equipamento!')
break
case 2:
alert('Você não informou o numero serial!')
break
case 3:
alert('Selecione uma data corretamente!')
break
case 4:
alert('Para finalizar, você precisa informar seu nome!')
break
case 5:
alert('Registro cancelado com sucesso!')
break
default:
alert('Ocorreu um erro desconhecido, tente novamente!')
break
}
}
/*fim dos dados que serão gravados*/
/*a função abaixo vai verificar se o item que estamos tentando inserir ja esta no banco de dados
caso positivo, o sistema não deve permitir que o usuario insira-o no estoque*/
function verifica_duplicata(lista, serial, tipo) {
let obs = false
let existe = false
for (let index = 0; index < lista.length; index++) {
let numero = lista[index][1];
let transação = lista[index][4]
if (numero == serial && transação == tipo) {
obs = true
if (tipo == 'Entrada') {
alert('Aparentemente outro usuario ja adcionou esse equipamento antes,\n confira o numero serial antes de tentar novamente')
} else if (tipo == 'Saida') {
alert('Esse equipamento não está no estoque, confira o numero serial antes de tentar novamente!')
} else {
alert('Não consegui realizar o procedimento solicitado contate o suporte!')
}
}
}
if (obs) {
existe = true
}
return existe
}
/*Função para salvar os dados no Firebase */
function save_equipamento(maq, ser, dat, reg, tipo) {
if (!logado) {
alert('Faça loguin antes de acessar esse recurso!')
} else {
span_geral.display = 'none'
leitura_data()
let status = read_config()
var newMessageRef = bank_enter.push();
var eqm = [maq, ser, dat, reg, tipo]
let exists = verifica_duplicata(lista_banco, ser, tipo)
let in_banck = false;
if (lista_banco.includes(ser) && tipo == 'Saida') {
alert('Esse equipamento, não existe ou ja foi retirado, \n verifique o numero serial e tente novamente! ')
} else {
/*ação caso exista ou não*/
if (exists) {
//nada
} else {
if (status == 'init') {
newMessageRef.set(
eqm
);
if (tipo == 'Saida') {
del_if_exit(ser)
}
//por enquanto vou somente salvar nessa lista, futuramente sera a lista de historicos de retirada mostrada
//ao usuario so vai executar se o tipo for (*Saida)
clear_all(tipo)
informa_atualização(reg + ' acabou de realizar uma ' + tipo + ' em um(a) ' + maq + ' no estoque')
} else {
if (logado == true) {
head_generator(['equipamento', 'Serial', 'Data', 'Responsavel', 'Transação'], maq, ser, dat, reg, tipo)
}
else {
alert('Procure um adminstrador do sistema!')
clear_all(tipo)
}
}
}
}
}
}
/*Fim da função para salvar dados no firebase*/
/*Função para salvar o cabeçalho da tabela no banco de dados*/
function head_generator(heads, maq, ser, dat, reg, tipo) {
var eqm = [maq, ser, dat, reg, tipo]
var newMessageRef = bank_enter.push();
newMessageRef.set(
heads
);
alert('seu espaço de estoque foi criado com sucesso! A seguir vamos adcionar seus primeiros equipamentos!')
write_config('init')// configuração será realizada aqui
save_equipamento(maq, ser, dat, reg, tipo)
if (tipo == 'Entrada') {
//mostrar mensagem de entrada de equipamento
alert(maq + ' foi adcionado ao estoque com sucesso por ' + reg)
clear_all(tipo)
leitura_data()
} else {
//mostrar mensagem de saida de equipamento
alert(maq + ' foi retirado do estoque com sucesso por ' + reg)
del_if_exit(ser)
clear_all(tipo)
leitura_data()
}
}
/*fim da função que cria o cabeçalho da tabela no banco de dados*/
/*Função para leitura de dados no firebase*/
function leitura_data() {
span_geral.display = 'block'
lista_banco = []
bank_enter.on('child_added', function (snapshot) {
lista_banco.push(snapshot.val());
});
}
/*Fim da função para leitura de dados no firebase*/
/*Funçaõ que cria uma tabela para apresentação de dados na tela do usuario*/
function apresentarData(dados) {
tabela = criarTabela(dados)
var sp = document.getElementById('conteudo_estoque')
sp.appendChild(tabela)
desfazer_tabela(tabela)
}
/*função faz com que a tabela fique vazia*/
function desfazer_tabela(tabela) {
criarTabela([])
}
/*Função que permite a apresentação dos dados na tela do usuario*/
function acessar_estoque(classe) {
if (!logado) {
alert('Usuario não autorizado!')
} else {
span_entrada.display = 'none'
span_geral.display = 'block'
span_saida.display = 'none'
span_totais.display = 'none'
apresentarData(lista_banco)
lista_banco = []
estoque = document.getElementById(classe).style;//estoque
controle = document.querySelector('.formulario1').style;
estoque.display = 'block'
controle.display = 'none'
}
}
/*Fim da função que mostra a apresentação de dados na tela*/
/*Função que estilçiza a tela do formulario para o usuario*/
function acessar_controle(classe) {
span_entrada.display = 'none'
span_geral.display = 'none'
span_saida.display = 'none'
controle = document.querySelector(classe).style;
estoque = document.getElementById('estoque').style;//estoque
controle.display = 'block'
estoque.display = 'none'
}
/*Fim da funçaõ que permite apresentação da tela de formaulario*/
/*Função para limpar os dados do formulario para novas inserções*/
function clear_all(decisão) {
var select = document.getElementById("eqpms");
var equipamento = select.options[select.selectedIndex].text;
var text = document.getElementById("serial");
var serial = text.value
var data = document.getElementById("data");
var StringData = data.value;
select.selectedIndex = 0//define o painel inicial
text.value = ""
/*tenho a data atual caso eu desista de pegar pelo formulario*/
const hoje = new Date();
var dia = hoje.getDate()
var mes = hoje.getMonth() + 1
var ano = hoje.getFullYear()
data.value = "dd/mm/yyyy"
}
/*Fim da função que limpa os campos do formulario para novas inserções*/
function criarTabela(conteudo) {
var tabela = document.createElement("table");
var thead = document.createElement("thead");
var tbody = document.createElement("tbody");
var thd = function (i) { return (i == 0) ? "th" : "td"; };
for (var i = 0; i < conteudo.length; i++) {
var tr = document.createElement("tr");
for (var o = 0; o < conteudo[i].length; o++) {
var t = document.createElement(thd(i));
var texto = document.createTextNode(conteudo[i][o]);
t.appendChild(texto);
tr.appendChild(t);
}
(i < lista_banco.length) ? thead.appendChild(tr) : tbody.appendChild(tr);
}
tabela.appendChild(thead);
tabela.appendChild(tbody);
tabela.setAttribute('id', 'tabela_estoque')
return tabela;
}
/*função utilizada para recolher apenas as saidas de equipamentos*/
function apenas_saidas() {
if (!logado) {
alert('Usuário não autorizado!')
} else {
leitura_data()
let lista_saida = []
lista_saida = [['Data', 'Equipamento', 'Serial']]
lista_banco.forEach(element => {
if (element[4] == 'Saida') {
lista_saida.push([element[2], element[0], element[1]])
}
});
return lista_saida
}
}
/*responsavel por apresentar as saidas recentes, devo armazenar em um local onde
posso controlar a quantidade de saidas armazenadas*/
function apresenta_saidas(classe) {
span_entrada.display = 'none'
span_totais.display = 'none'
tabela_saida = criarTabela(apenas_saidas())
span_geral.display = 'none'
span_exit.appendChild(tabela_saida)
estoque = document.getElementById(classe).style;//estoque
controle = document.querySelector('.formulario1').style;
estoque.display = 'block'
controle.display = 'none'
span_saida.display = 'block'
}
/*função utilizada para recolher apenas as entradas de equipamentos*/
function apenas_entradas() {
if (!logado) {
alert('Usuário não autorizado')
} else {
leitura_data()
let lista_entrada = []
lista_entrada = [['Data', 'Equipamento', 'Serial']]
lista_banco.forEach(element => {
if (element[4] == 'Entrada') {
lista_entrada.push([element[2], element[0], element[1]])
}
});
return lista_entrada
}
}
/*responsavel por apresentar todas entradas*/
function apresenta_entradas(classe) {
span_totais.display = 'none'
span_saida.display = 'none'
span_totais.display = 'none'
tabela_entrada = criarTabela(apenas_entradas())
span_geral.display = 'none'
span_enter.appendChild(tabela_entrada)
estoque = document.getElementById(classe).style;//estoque
controle = document.querySelector('.formulario1').style;
estoque.display = 'block'
controle.display = 'none'
span_entrada.display = 'block'
}
/**faz as leituras iniciais para o sistema funcionar corretamente */
function init_read() {
let data = document.getElementById('data')
var today = new Date()
now = today.toLocaleDateString("pt-BR");
data.value = now
read_to_select()
leitura_data()
islogado()
read_config()
}
//rotina de verificação de novos equipamentos no banco
function informa_atualização(mensagem) {
alert(mensagem)
}
//metodo para deletar equipamentos do banco
function del_if_exit(serial) {
firebase.database().ref('Estoque Bilhetagem Serramar').once('value').then(function (snapshot) {
snapshot.forEach(function (childSnapshot) {
var key = childSnapshot.key;
var value = childSnapshot.val();
//antes disso salvar lista para saida com duração limitada
if (value[1] == serial && value[4] == 'Entrada') {
firebase.database().ref('Estoque Bilhetagem Serramar/' + key).remove()
}
});
});
}
//função para apagar o historico de saidas
function clear_exit_history() {
firebase.database().ref('Estoque Bilhetagem Serramar').once('value').then(function (snapshot) {
snapshot.forEach(function (childSnapshot) {
var key = childSnapshot.key;
var value = childSnapshot.val();
//antes disso salvar lista para saida com duração limitada
if (value[4] == 'Saida') {
firebase.database().ref('Estoque Bilhetagem Serramar/' + key).remove()
}
});
});
location.reload()
}