Untitled

mail@pastecode.io avatar
unknown
python
a year ago
5.9 kB
1
Indexable
Never
# -*- coding:utf-8 -*-
from rh.ac.models import *
from datetime import datetime
from contrib.utils import DateRange, MultipleDateRange
import sys
import os
import time
from standard.models import ClassCode

MONTHS = [6,7,8,9,10,11,12]
YEAR = 2022

#ABRIR/FECHAR MESES
def open_close_months(close=False):
    for month in MONTHS:
        print'ABRINDO/FECHANDO MES : {}'.format(month)
        MonthActivity.closing_months(month,YEAR,close)

#ATUALIZAR OS CALCS
def update_calcs():
    classcode = ClassCode.objects.get(slug='ac-mppi-calculation')
    cfgs = Configuration.objects.filter()
    for cfg in cfgs:
        print 'SALVANDO CFG:',cfg ,classcode
        cfg.calculation = classcode
        cfg.save()

def update_mas():
    mas = MonthActivity.objects.filter(month=6,year=YEAR)
    startTime = datetime.now()
    total = len(mas)
    atual = 0
    print '<<< ATUALIZANDO SALDO MONTHACTIVITYS >>>'
    for ma in mas:
        atual+=1        
        print_pct(atual,total,datetime.now() - startTime,ma)
        # print 'atualizando saldo', ma
        ma.save()

def print_pct(atual,total,segundos_gastos,texto=None):
    pct = int((float(atual)/float(total)*100))
    pct_float = float(atual)/float(total)*100
    qnt = pct/2
    barra = ''
    segundos_gastos = segundos_gastos.seconds
    total_segundos = int((float(segundos_gastos) / pct_float)*100)
    for q in range(1, qnt, 1):
        barra +='|'
    for q in range(1, 51 - qnt, 1):
        barra += ' '
    barra = '['+barra+'] '
    sys.stdout.write("\033[F") # Cursor up one line
    if texto:
        print texto
    print barra + str(pct) +' /100%' + ' tempo gasto: '+ time.strftime('%H:%M:%S', time.gmtime(segundos_gastos)) + ' | previsao total : ' + time.strftime('%H:%M:%S', time.gmtime(total_segundos))

def get_balance_zero():
    mas = MonthActivity.objects.filter(month=3,year=2023,balance__lt=0)
    sem_expedientes = []
    for ma in mas:
        das = DayActivity.objects.filter(employee=ma.employee,month_activity__month__in=MONTHS,month_activity__year=YEAR,activity_type__classification=7)
        for da in das:
            if da.month_activity not in sem_expedientes:
                sem_expedientes.append(da.month_activity)
    
    for ma in sem_expedientes:
        print ma

def get_balance_old():
    MATRICULAS =[2609,15326,173,16120,15052,15444,15279,15148,15534,15524,137,15234,15306,2456,15817,269,15596,16500,15528,225,365,15451,375,15211,16801,376]
    mas = MonthActivity.objects.filter(year=2023,month=3,employee__matricula__in=MATRICULAS)
    dict_ma = {}
    for ma in mas:
        dict_ma[ma.employee.matricula] = ma.balance
    print dict_ma

def get_dict_balance():
    return {15234: 312, 137: 19, 269: 35, 2456: 194, 16801: 73, 15524: 0, 15528: 1070, 15148: 0, 173: 56, 15534: 176, 15279: 0, 2609: 286, 15817: 0, 15306: 0, 15052: 117, 16120: 10, 15444: 0, 15451: 58, 15326: 288, 225: 0, 15211: 1098, 15596: 745, 365: 495, 16500: 0, 375: 147, 376: 131}

def update_balances():
    MATRICULAS =[2609,15326,173,16120,15052,15444,15279,15148,15534,15524,137,15234,15306,2456,15817,269,15596,16500,15528,225,365,15451,375,15211,16801,376]
    saldos_anteriores = get_dict_balance()

    for matricula in MATRICULAS:
        MonthActivity.objects.filter(month__in=MONTHS,year=YEAR,employee__matricula=matricula).update(is_changeable=False)
        mas = MonthActivity.objects.filter(month__in=[6],year=YEAR,employee__matricula=matricula)
        for ma in mas:
            ma.recalculate()
            ma.save()

        MonthActivity.objects.filter(month__in=MONTHS,year=YEAR,employee__matricula=matricula).update(is_changeable=True)

    for matricula in MATRICULAS:
        saldo_atual = MonthActivity.objects.filter(employee__matricula=matricula,month=3,year=2023).first().balance
        saldo_anterior = saldos_anteriores[matricula]
        acumulos_semana = 0
        das = DayActivity.objects.filter(date__gte='2023-03-03',date__lte='2023-03-10',employee__matricula=matricula)
        
        for da in das:
            acumulos_semana += da.authorized_accumulation
        
        if saldo_atual >= 0:
            saldo_correcao = (saldo_anterior + acumulos_semana) - saldo_atual
        else:  
            saldo_correcao = (saldo_anterior + acumulos_semana) - saldo_atual
        
        ma = MonthActivity.objects.get(month=6,year=2022,employee__matricula=matricula)
        balance = ma.balance + saldo_correcao
        print 'ATUALIZANDO SALDO:' ,ma 
        MonthActivity.objects.filter(id=ma.pk).update(balance=balance)
        
        #UPDATE SALDOS
        MonthActivity.objects.filter(month__in=MONTHS,year=YEAR,employee__matricula=matricula).update(is_changeable=False)
        mas = MonthActivity.objects.filter(month__in=[7],year=YEAR,employee__matricula=matricula)
        for ma in mas:
            ma.recalculate()
            ma.save()

        MonthActivity.objects.filter(month__in=MONTHS,year=YEAR,employee__matricula=matricula).update(is_changeable=True)

def recalculate_saldo_zero():
    mas = MonthActivity.objects.filter(month=3,year=2023,balance__lt=0)

    servidores_com_atrasos = []
    for ma in mas:
        if ma.employee not in servidores_com_atrasos:
            servidores_com_atrasos.append(ma.employee)
    
    #ABRINDO MESES
    for s in servidores_com_atrasos:
        print 'recalculando servidor:' , s
        MonthActivity.objects.filter(month__in=MONTHS,year=YEAR,employee__matricula=s.matricula).update(is_changeable=False)
        mas = MonthActivity.objects.filter(month__in=MONTHS,year=YEAR,employee__matricula=s.matricula)
        for ma in mas:
            ma.save()
        MonthActivity.objects.filter(month__in=MONTHS,year=YEAR,employee__matricula=s.matricula).update(is_changeable=True)
            

def print_saldo_zero():
    mas = MonthActivity.objects.filter(month=3,year=2023,balance__lt=0)
    for ma in mas:
        print ma