def ajustar_porcentagem_profissional(request, format=None): atividade_profissional = AtividadeProfissional.objects.get( pk=request.data['id']) atividade_profissional.percentual_concluido = request.data[ 'percentual_concluido'] atividade_profissional.save() #ultima alocacao horas sem alocacao_horas = AlocacaoHoras.objects.filter( atividade_profissional=atividade_profissional, tipo_alocacao__isnull=True).order_by('-id')[0] alocacao_horas.percentual_concluido = request.data['percentual_concluido'] alocacao_horas.save() #Calcular percentual atividade atividade = Atividade.objects.filter( atividadeprofissional=atividade_profissional)[0] atividades_profissionais = AtividadeProfissional.objects.filter( atividade=atividade) percentual_calculado = sum( (a.percentual_calculado if a.percentual_calculado else 0) for a in atividades_profissionais) / len(atividades_profissionais) percentual_concluido = sum( (a.percentual_concluido if a.percentual_concluido else 0) for a in atividades_profissionais) / len(atividades_profissionais) atividade.percentual_calculado = percentual_calculado atividade.percentual_concluido = percentual_concluido atividade.save() #calcular percentual fase_atividade fase_atividade = FaseAtividade.objects.filter(atividade=atividade)[0] atividades = Atividade.objects.filter(fase_atividade=fase_atividade) percentual_calculado = sum( (a.percentual_calculado if a.percentual_calculado else 0) for a in atividades) / len(atividades) percentual_concluido = sum( (a.percentual_concluido if a.percentual_concluido else 0) for a in atividades) / len(atividades) fase_atividade.percentual_calculado = percentual_calculado fase_atividade.percentual_concluido = percentual_concluido fase_atividade.save() demanda = Demanda.objects.filter(faseatividade=fase_atividade)[0] fase_atividades = FaseAtividade.objects.filter(demanda=demanda) percentual_calculado = sum( (a.percentual_calculado if a.percentual_calculado else 0) for a in fase_atividades) / len(fase_atividades) percentual_concluido = sum( (a.percentual_concluido if a.percentual_concluido else 0) for a in fase_atividades) / len(fase_atividades) demanda.percentual_calculado = percentual_calculado demanda.percentual_concluido = percentual_concluido demanda.save() return Response( AtividadeProfissionalSerializer(atividade_profissional).data)
def deletar_alocacao(request, alocacao_id, format=None): alocacao_horas = AlocacaoHoras.objects.get(pk=alocacao_id) alocacao_horas.delete() calcular_horas_percentual_atividade(alocacao_horas.atividade_profissional) return Response( AtividadeProfissionalSerializer( alocacao_horas.atividade_profissional).data)
def buscar_atividade_profissional_por_atividade(request, atividade_id, format=None): atividade_profissional = AtividadeProfissional.objects.filter( atividade__id=atividade_id, pessoa_fisica__prestador__usuario__id=request.user.id)[:1] atividade_profissional_dict = AtividadeProfissionalSerializer( atividade_profissional[0]).data return Response(atividade_profissional_dict)
def deletar_alocacao_interna(request, alocacao_id, format=None): alocacao_horas = AlocacaoHoras.objects.get(pk=alocacao_id) alocacao_horas.delete() atividade_profissional = alocacao_horas.atividade_profissional alocacoes = AlocacaoHoras.objects.filter( atividade_profissional=atividade_profissional) atividade_profissional.horas_alocadas_milisegundos = sum( a.horas_alocadas_milisegundos for a in alocacoes) atividade_profissional.save() return Response( AtividadeProfissionalSerializer(atividade_profissional).data)
def alocar_horas_internas(request, format=None): atividade_profissional = None if 'atividade_profissional' in request.data: atividade_profissional = AtividadeProfissional.objects.get( pk=request.data['atividade_profissional']['id']) del request.data['atividade_profissional'] if 'atividade' in request.data: if atividade_profissional is None: atividade = Atividade.objects.get( pk=request.data['atividade']['id']) atividade_profissional = AtividadeProfissional() atividade_profissional.atividade = atividade pessoa_fisica = PessoaFisica.objects.filter( prestador__usuario__id=request.user.id)[0] atividade_profissional.pessoa_fisica = pessoa_fisica atividade_profissional.quantidade_horas = 0 atividade_profissional.percentual_calculado = 0 atividade_profissional.percentual_concluido = 0 atividade_profissional.save() del request.data['atividade'] alocacao_horas = AlocacaoHoras(**request.data) alocacao_horas.atividade_profissional = atividade_profissional alocacao_horas.data_informada = converter_string_para_data( request.data['data_informada']) alocacao_horas.data_alocacao = datetime.datetime.now() if 'observacao' in request.data and request.data['observacao']: alocacao_horas.observacao = request.data['observacao'] else: alocacao_horas.observacao = None alocacao_horas.percentual_concluido = 0 alocacao_horas.save() horas_alocadas_milisegundos = request.data['horas_alocadas_milisegundos'] if (atividade_profissional.horas_alocadas_milisegundos): atividade_profissional.horas_alocadas_milisegundos += horas_alocadas_milisegundos else: atividade_profissional.horas_alocadas_milisegundos = horas_alocadas_milisegundos atividade_profissional.save() return Response( AtividadeProfissionalSerializer(atividade_profissional).data)
def alocar_horas(request, format=None): if 'alocacao_id' in request.data: alocacao_horas = AlocacaoHoras.objects.get( pk=request.data['alocacao_id']) else: raise Exception('Alocação não selecionado') atividade_profissional = alocacao_horas.atividade_profissional tipo_alocacao = None if 'tipo_alocacao' in request.data: if request.data['tipo_alocacao']: tipo_alocacao = TipoAlocacao.objects.get( pk=request.data['tipo_alocacao']['id']) del request.data['tipo_alocacao'] hora_inicio = datetime.datetime.strptime(request.data['hora_inicio'], '%H:%M') hora_fim = datetime.datetime.strptime(request.data['hora_fim'], '%H:%M') subtracao = hora_fim - hora_inicio if (subtracao.seconds * 1000) != request.data['horas_alocadas_milisegundos']: raise Exception("Milisegundos não confere") alocacao_horas.horas_alocadas_milisegundos = request.data[ 'horas_alocadas_milisegundos'] alocacao_horas.hora_inicio = request.data['hora_inicio'] alocacao_horas.hora_fim = request.data['hora_fim'] alocacao_horas.percentual_concluido = request.data[ 'percentual_concluido'] if 'percentual_concluido' in request.data else None alocacao_horas.observacao = request.data[ 'observacao'] if 'observacao' in request.data else None alocacao_horas.data_informada = converter_string_para_data( request.data['data_informada']) alocacao_horas.data_alocacao = datetime.datetime.now() alocacao_horas.tipo_alocacao = tipo_alocacao alocacao_horas.save() calcular_horas_percentual_atividade(atividade_profissional) return Response( AtividadeProfissionalSerializer(atividade_profissional).data)
def serializar_fase_atividade(fase_atividades): ''' Utilizado em outros locais além desse ''' fase_atividade_list = [] if fase_atividades: fase_atividade_list = FaseAtividadeSerializer(fase_atividades, many=True).data for i in fase_atividade_list: if 'data_inicio' in i: i['data_inicio'] = serializar_data(i['data_inicio']) if 'data_fim' in i: i['data_fim'] = serializar_data(i['data_fim']) atividades = Atividade.objects.filter(fase_atividade__id=i['id']) atividade_list = [] if atividades: atividade_list = AtividadeSerializer(atividades, many=True).data for a in atividade_list: if 'data_inicio' in a: a['data_inicio'] = serializar_data(a['data_inicio']) if 'data_fim' in a: a['data_fim'] = serializar_data(a['data_fim']) atividade_profissionais = AtividadeProfissional.objects.filter( atividade__id=a['id']) if atividade_profissionais: a['atividadeprofissionais'] = AtividadeProfissionalSerializer( atividade_profissionais, many=True).data i['atividades'] = atividade_list return fase_atividade_list
def alocar_horas_internas(request, format=None): if 'alocacao_id' in request.data: alocacao_horas = AlocacaoHoras.objects.get( pk=request.data['alocacao_id']) else: raise Exception('Alocação não selecionado') atividade_profissional = alocacao_horas.atividade_profissional alocacao_horas.atividade_profissional = atividade_profissional alocacao_horas.horas_alocadas_milisegundos = request.data[ 'horas_alocadas_milisegundos'] alocacao_horas.data_informada = converter_string_para_data( request.data['data_informada']) alocacao_horas.hora_inicio = request.data['hora_inicio'] alocacao_horas.hora_fim = request.data['hora_fim'] if 'observacao' in request.data and request.data['observacao']: alocacao_horas.observacao = request.data['observacao'] else: alocacao_horas.observacao = None alocacao_horas.data_alocacao = datetime.datetime.now() alocacao_horas.percentual_concluido = 0 alocacao_horas.save() alocacoes = AlocacaoHoras.objects.filter( atividade_profissional=atividade_profissional) atividade_profissional.horas_alocadas_milisegundos = sum( a.horas_alocadas_milisegundos for a in alocacoes) atividade_profissional.save() return Response( AtividadeProfissionalSerializer(atividade_profissional).data)
def alocar_horas(request, format=None): atividade_profissional = None if 'atividade_profissional' in request.data: atividade_profissional = AtividadeProfissional.objects.get( pk=request.data['atividade_profissional']['id']) del request.data['atividade_profissional'] tipo_alocacao = None if 'tipo_alocacao' in request.data: tipo_alocacao = TipoAlocacao.objects.get( pk=request.data['tipo_alocacao']['id']) del request.data['tipo_alocacao'] hora_inicio = datetime.datetime.strptime(request.data['hora_inicio'], '%H:%M') hora_fim = datetime.datetime.strptime(request.data['hora_fim'], '%H:%M') subtracao = hora_fim - hora_inicio if (subtracao.seconds * 1000) != request.data['horas_alocadas_milisegundos']: raise Exception("Milisegundos não confere") alocacao_horas = AlocacaoHoras(**request.data) alocacao_horas.atividade_profissional = atividade_profissional alocacao_horas.data_informada = converter_string_para_data( request.data['data_informada']) alocacao_horas.data_alocacao = datetime.datetime.now() alocacao_horas.tipo_alocacao = tipo_alocacao alocacao_horas.save() horas_alocadas_milisegundos = request.data['horas_alocadas_milisegundos'] percentual_concluido = request.data['percentual_concluido'] if (atividade_profissional.horas_alocadas_milisegundos): atividade_profissional.horas_alocadas_milisegundos += horas_alocadas_milisegundos else: atividade_profissional.horas_alocadas_milisegundos = horas_alocadas_milisegundos quantidade_horas_milisegundos = atividade_profissional.quantidade_horas * 60 * 60 * 1000 percentual_calculado = (atividade_profissional.horas_alocadas_milisegundos * 100) / quantidade_horas_milisegundos if percentual_calculado > 100: percentual_calculado = 100 atividade_profissional.percentual_calculado = percentual_calculado atividade_profissional.percentual_concluido = percentual_concluido atividade_profissional.save() #Calcular percentual atividade atividade = Atividade.objects.filter( atividadeprofissional=atividade_profissional)[0] atividades_profissionais = AtividadeProfissional.objects.filter( atividade=atividade) percentual_calculado = sum( (a.percentual_calculado if a.percentual_calculado else 0) for a in atividades_profissionais) / len(atividades_profissionais) percentual_concluido = sum( (a.percentual_concluido if a.percentual_concluido else 0) for a in atividades_profissionais) / len(atividades_profissionais) if (atividade.percentual_concluido < 100 and percentual_concluido == 100): atividade.data_conclusao_atividade = datetime.datetime.now() atividade.percentual_calculado = percentual_calculado atividade.percentual_concluido = percentual_concluido atividade.save() #calcular percentual fase_atividade fase_atividade = FaseAtividade.objects.filter(atividade=atividade)[0] atividades = Atividade.objects.filter(fase_atividade=fase_atividade) percentual_calculado = sum( (a.percentual_calculado if a.percentual_calculado else 0) for a in atividades) / len(atividades) percentual_concluido = sum( (a.percentual_concluido if a.percentual_concluido else 0) for a in atividades) / len(atividades) fase_atividade.percentual_calculado = percentual_calculado fase_atividade.percentual_concluido = percentual_concluido fase_atividade.save() demanda = Demanda.objects.filter(faseatividade=fase_atividade)[0] fase_atividades = FaseAtividade.objects.filter(demanda=demanda) percentual_calculado = sum( (a.percentual_calculado if a.percentual_calculado else 0) for a in fase_atividades) / len(fase_atividades) percentual_concluido = sum( (a.percentual_concluido if a.percentual_concluido else 0) for a in fase_atividades) / len(fase_atividades) demanda.percentual_calculado = percentual_calculado demanda.percentual_concluido = percentual_concluido demanda.save() return Response( AtividadeProfissionalSerializer(atividade_profissional).data)