-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathanalises.py
More file actions
398 lines (316 loc) · 13.4 KB
/
analises.py
File metadata and controls
398 lines (316 loc) · 13.4 KB
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
import collections
import configparser
import datetime
import itertools
import requests
import db_functions
# BLOCO GET ENDPOINT E KEYS
config = configparser.ConfigParser()
config.read('config/integracao.conf')
api = config.get('ENDPOINTS', 'PRATOABERTO_API')
def dia_semana(dia):
diasemana = ('Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab', 'Dom')
return diasemana[dia]
def replace_cardapio(cardapio):
config_editor = db_functions.select_all()
for de_para in config_editor:
cardapio = [de_para[4] if x == de_para[3] else x for x in cardapio]
cardapio = [x for x in cardapio if x != '']
return cardapio
def data_semana_format(text):
date = datetime.datetime.strptime(text, "%Y%m%d").isocalendar()
return str(date[0])+"-"+str(date[1])
def get_cardapios_iguais():
url = api + '/cardapios?status=PENDENTE&status=SALVO'
r = requests.get(url)
refeicoes = r.json()
# Formatar as chaves
semanas = {}
for refeicao in refeicoes:
_key_semana = data_semana_format(refeicao['data'])
if _key_semana in semanas.keys():
semanas[_key_semana].append(refeicao['data'])
else:
semanas[_key_semana] = [refeicao['data']]
ingredientes = collections.defaultdict(list)
for refeicao in refeicoes:
agrupamento = str(refeicao['agrupamento'])
tipo_unidade = refeicao['tipo_unidade']
tipo_atendimento = refeicao['tipo_atendimento']
status = refeicao['status']
idade = refeicao['idade']
_key_semana = data_semana_format(refeicao['data'])
for alimentos in refeicao['cardapio_original'].keys():
_key = frozenset(replace_cardapio(refeicao['cardapio_original'][alimentos]))
ingredientes[_key].append([agrupamento, tipo_unidade, tipo_atendimento, status, idade, _key_semana])
return ingredientes
def open_csv():
path = './tmp'
file = 'Cardapios Novos.csv'
cardapio = []
with open(path+'/'+file, 'r', encoding='utf-8') as f:
# REFEIÇÕES
text = f.read().replace(' (Sopa e Fruta)', '')
text = text.replace('(Papa Principal e Papa de Fruta)', '')
text = text.replace('(Sopa e Fruta)', '')
text = text.replace('(Papa de Fruta)', '')
text = text.replace('(Papa Principal e Papa de Fruta/Suco)', '')
text = text.replace('(Fórmula e Papa de Fruta)', '')
text = text.replace('(Fruta)', '')
text = text.replace('R1 - REFEICAO 1 da Tarde', 'R1 - REFEICAO 1')
text = text.replace('A - ALMOCO (R1 - REFEICAO 1 e Fruta/Suco)', 'R1 - REFEICAO 1')
text = text.replace('(R1 - REFEICAO 1 e Fruta/Suco)', '')
# IDADES
text = text.replace('7 meses', 'D - 7 MESES')
text = text.replace('0 a 5 meses', 'D - 0 A 5 MESES')
text = text.replace('6 meses', 'D - 6 MESES')
text = text.replace('2 - 6 anos', 'I - 2 A 6 ANOS')
text = text.replace('8 a 11 meses', 'E - 8 A 11 MESES')
text = text.replace('1 ano - 1 ano e 11 meses', 'X - 1A -1A E 11MES')
text = text.replace('TODAS', 'Z - UNIDADES SEM FAIXA')
text = text.replace('\n', '')
cardapio = text.split('|')
cardapio_aux = []
for nrow in range(0, len(cardapio), 5):
if len(cardapio[nrow:nrow+5]) == 5:
x = cardapio[nrow:nrow + 5]
ingredientes = ', '.join([y.strip() for y in x[3].split(',') if y.strip() != ''])
dsemana = datetime.datetime.strptime(x[4].strip(), '%d-%m-%Y').weekday()
row = [x[0], x[1].strip(), x[2].strip(), ingredientes, dia_semana(dsemana)]
cardapio_aux.append(row)
cardapio_aux.sort()
cardapio = list(cardapio_aux for cardapio_aux, _ in itertools.groupby(cardapio_aux))
db_functions.truncate_receitas_terceirizadas()
objects = []
for row in cardapio:
if row[3] != '':
objects.append(['TERCEIRIZADA', row[0], 'EDITAL 78/2016', row[4], row[1], row[2], row[3]])
# db_functions.add_cardapio('TERCEIRIZADA', row[0], 'EDITA1', row[4], row[1], row[2], row[3])
db_functions.add_bulk_cardapio(objects)
def get_escola(cod_eol):
url = api + '/escola/{}'.format(cod_eol)
r = requests.get(url)
escola = r.json()
return escola
def get_escolas():
url = api + '/escolas?completo'
r = requests.get(url)
escolas = r.json()
return escolas
def get_escola(cod_eol):
url = api + '/escola/{}'.format(cod_eol)
r = requests.get(url)
try:
escola = r.json()
except:
escola = None
return escola
def post_cardapio():
escolas = get_escolas()
headers = {'Content-type': 'application/json'}
count = 0
for escola in escolas:
print(count)
count += 1
# 1. Criar o agrupamento_regiao
# escola['agrupamento_regiao'] = escola['agrupamento']
# 2. Se terceirizada, acrescentar o 'EDITAL 78/2016'
if escola['tipo_atendimento'] == 'TERCEIRIZADA':
escola['agrupamento'] = 'EDITAL 78/2016'
escola['edital'] = 'EDITAL 78/2016'
# 4. Criar o status com o valor 'ativo'
escola['status'] = 'ativo'
r = requests.post(api + '/editor/escola/{}'.format(str(escola['_id'])),
data=json.dumps(escola),
headers=headers)
def post_idades_idades():
escolas = get_escolas()
headers = {'Content-type': 'application/json'}
count = 0
dic_refeicoes = {
'A - ALMOCO': 'A - ALMOCO',
'AA - ALMOCO ADULTO': 'AA - ALMOCO ADULTO',
'C - COLACAO': 'C - COLACAO',
'D - DESJEJUM': 'D - DESJEJUM',
'FPJ - FILHOS PRO JOVEM': 'FPJ - FILHOS PRO JOVEM',
'J - JANTAR': 'J - JANTAR',
'L - LANCHE': 'L - LANCHE',
'L4 - LANCHE 4 OU LANCHE 8 HORAS': 'L4 - LANCHE 4 HORAS',
'L5 - LANCHE 5 OU 6 HORAS': 'L5 - LANCHE 5 HORAS',
'L5 - LANCHE 5 OU LANCHE 6 HORAS': 'L5 - LANCHE 5 HORAS',
'MI - MERENDA INICIAL': 'MI - MERENDA INICIAL',
'MS - MERENDA SECA': 'MS - MERENDA SECA',
'R1 - REFEICAO 1': 'R1 - REFEICAO 1'
}
for escola in escolas:
count += 1
if 'refeicoes' in escola.keys():
refeicao_aux = []
for refeicao in escola['refeicoes']:
if refeicao in dic_refeicoes.keys():
refeicao_aux.append(dic_refeicoes[refeicao])
else:
refeicao_aux.append(refeicao)
if refeicao_aux != escola['refeicoes']:
print(count, escola['_id'], refeicao_aux, escola['refeicoes'])
escola['refeicoes'] = refeicao_aux
refeicao_aux = []
if 'historico' in escola.keys():
if escola['historico'] != []:
for refeicao in escola['historico']['refeicoes']:
if refeicao in dic_refeicoes.keys():
refeicao_aux.append(dic_refeicoes[refeicao])
else:
refeicao_aux.append(refeicao)
escola['historico']['refeicoes'] = refeicao_aux
r = requests.post(api + '/editor/escola/{}'.format(str(escola['_id'])),
data=json.dumps(escola),
headers=headers)
def post_ordenar_refeicoes():
escolas = get_escolas()
headers = {'Content-type': 'application/json'}
count = 0
refeicoes_ordenadas = ['MI - MERENDA INICIAL',
'D - DESJEJUM',
'C - COLACAO',
'AA - ALMOCO ADULTO',
'A - ALMOCO',
'L - LANCHE',
'L4 - LANCHE 4 HORAS',
'L5 - LANCHE 5 HORAS',
'R1 - REFEICAO 1',
'MS - MERENDA SECA',
'FPJ - FILHOS PRO JOVEM',
'J - JANTAR']
for escola in escolas:
count += 1
print(escola['_id'], count)
if 'refeicoes' in escola.keys():
lista_ordenada = [x for x in refeicoes_ordenadas if x in escola['refeicoes']]
print(escola['refeicoes'], lista_ordenada)
escola['refeicoes'] = lista_ordenada
if 'historico' in escola.keys():
if escola['historico'] != []:
if 'refeicoes' in escola['historico'].keys():
lista_ordenada = [x for x in refeicoes_ordenadas if x in escola['refeicoes']]
escola['historico']['refeicoes'] = lista_ordenada
r = requests.post(api + '/editor/escola/{}'.format(str(escola['_id'])),
data=json.dumps(escola),
headers=headers)
def post_cardapio_add_merendas():
FILE = './tmp/Escolas x Tipo Refeição_Texto'
with open(FILE, 'r', encoding="ISO-8859-1") as f:
refeicao_escola = {}
for row in f.readlines():
data = row.replace("'", '').replace('\n', '').split(', ')
if data[0] in refeicao_escola.keys():
refeicao_escola[data[0]].append(data[1])
else:
refeicao_escola[data[0]] = []
refeicao_escola[data[0]].append(data[1])
headers = {'Content-type': 'application/json'}
count = 0
for _id in refeicao_escola.keys():
print(str(count) + ' - ' + api + '/editor/escola/{}'.format(str(_id)))
escola = get_escola(_id)
if escola == None:
print(_id)
pass
else:
escola['_id'] = int(_id)
escola['refeicoes'] = refeicao_escola[_id]
# print(str(count) + ' - ' + api + '/editor/escola/{}'.format(str(escola['_id'])))
r = requests.post(api + '/editor/escola/{}'.format(str(escola['_id'])),
data=json.dumps(escola),
headers=headers)
count += 1
def get_quebras_escolas():
escolas = get_escolas()
mapa_base = collections.defaultdict(list)
for escola in escolas:
agrupamento = str(escola['agrupamento'])
tipo_unidade = escola['tipo_unidade']
tipo_atendimento = escola['tipo_atendimento']
if 'idades' in escola.keys():
for idade in escola['idades']:
_key = ', '.join([agrupamento, tipo_unidade, tipo_atendimento, idade])
mapa_base[_key].append(escola['_id'])
else:
pass
# print(escola)
mapa = []
for row in mapa_base:
mapa.append(row.split(', ') + [len(mapa_base[row])] + [mapa_base[row][0]])
return mapa
def get_cardapio(args):
url = api + '/editor/cardapios?' + '&'.join(['%s=%s' % item for item in args.items()])
r = requests.get(url)
refeicoes = r.json()
return refeicoes
def mapa_pendencias():
mapa = get_quebras_escolas()
delta_dias = datetime.timedelta(days=7)
dia_semana_seguinte = datetime.datetime.now() + delta_dias
semana = [dia_semana_seguinte + datetime.timedelta(days=i) for i in range(0 - dia_semana_seguinte.weekday(), 7 - dia_semana_seguinte.weekday())]
dia_inicial = min(semana).strftime("%Y%m%d")
dia_final = max(semana).strftime("%Y%m%d")
dia_inicial = 20170918
dia_final = 20170922
# Por padrão, sempre colocaremos o cardápio da semana seguinte
mapa_final = []
for row in mapa:
args = {'agrupamento': row[0],
'tipo_unidade': row[1],
'tipo_atendimento': row[2],
'idade': row[3],
'status': 'SALVO',
'status': 'PUBLICADO',
'data_inicial': dia_inicial,
'data_final': dia_final}
cardapio = get_cardapio(args)
if cardapio == []:
args['status_publicacao'] = 0
mapa_final.append(args)
print(str(0), row)
else:
args['status_publicacao'] = 1
mapa_final.append(args)
print(str(1), row)
def update_receitas_terceirizadas():
r = db_functions.select_all_receitas_terceirizadas()
modificacoes = []
for row in r:
row_aux = list(row[1:])
# Atualiza
if row_aux[1] == 'CEI':
# row_aux = list(row_aux)
row_aux[1] = 'CEI_MUNICIPAL'
if row_aux[5] == 'R1 - REFEICAO 1':
row_aux[5] = 'J - JANTAR'
if row_aux[5] == 'L4 - LANCHE 4 HORAS':
row_aux[5] = 'L - LANCHE'
# Adiciona CCI - Cópia CEI
row_aux_CCI = row_aux.copy()
row_aux_CCI[1] = 'CCI'
modificacoes.append(row_aux_CCI)
modificacoes.append(row_aux)
modificacoes.sort()
modificacoes = list(modificacoes for modificacoes, _ in itertools.groupby(modificacoes))
db_functions.truncate_receitas_terceirizadas()
db_functions.add_bulk_cardapio(modificacoes)
def get_cardapios():
url = api + '/editor/cardapios?status=PENDENTE&status=SALVO&status=PUBLICADO'
r = requests.get(url)
refeicoes = r.json()
for refeicao in refeicoes:
if refeicao['tipo_atendimento'] == 'TERCEIRIZADA':
if refeicao['tipo_unidade'] == 'CEI':
refeicao['tipo_unidade'] = 'CEI_MUNICIPAL'
print(refeicao['status'], refeicao)
headers = {'Content-type': 'application/json'}
data = json.dumps([refeicao])
res = requests.post(api + '/editor/cardapios', data=data, headers=headers)
if __name__ == '__main__':
# open_csv()
import json
get_cardapios()