def getValueOfdays(fundvalues, beginDateStr, endDateStr, day): beginDate = str2date(beginDateStr) endDate = str2date(endDateStr) currDate = beginDate ret = {} while (currDate < endDate and currDate < datetime.now()): if (currDate.strftime("%a") == day or currDate.day == day or day == 0): if (not currDate in fundvalues.keys()): dbg(date2str(currDate)) currDate = incday(currDate) while (not currDate in fundvalues.keys()): dbg(date2str(currDate)) currDate = incday(currDate) ret[currDate] = fundvalues[currDate] currDate = incday(currDate) return ret
def datepicker(field,value): from myutils import date2str return DIV( INPUT(_class="form-control date-picker",_id="%s_%s" % (field._tablename, field.name), _name=field.name,_type="text",requires=field.requires,_value=date2str(value), _placeholder=T('Y-m-d'), **{'_data-date-format':T('Y-m-d')}), SPAN(I(_class="icon-calendar bigger-110"), _class="input-group-addon"), _class="input-group" )
def addPolicy(fv, detailInfo, more, rate, threshold=-0.01): days = list(detailInfo.keys()) added = {} for i in range(1, len(days) - 2): #latestinfo = detailInfo[days[i]] #preinfo = detailInfo[days[i-1]] if (fv[days[i]] - fv[days[i - 1]]) / fv[days[i - 1]] < threshold: #1% #nextinfo = detailInfo[days[i+2]] moreshare = more * (1 - rate) / fv[days[i + 2]] added[days[i + 2]] = [more, moreshare] #detailInfo[days[i + 2]] = [nextinfo[0]+more, nextinfo[1]+more, nextinfo[2]+moreshare, nextinfo[3]+moreshare, detailInfo[days[i + 2]][-1]] #detailInfo[days[-1]] = [0, detailInfo[days[-1]][1]+more, detailInfo[days[-1]][2]+moreshare, detailInfo[days[-1]][3]+moreshare, (detailInfo[days[-1]][3]+moreshare)*] log('Today: [%s], Mkt: %f; Preday: [%s], Mkt: %f. [%s] Add: %f, Share: %f' \ % (date2str(days[i]), fv[days[i]], date2str(days[i-1]), fv[days[i-1]], \ date2str(days[i+2]), more, moreshare)) elif (fv[days[i]] - fv[days[i - 1]]) / fv[days[i - 1]] > -threshold: moreshare = more * (1 - rate) / fv[days[i + 2]] added[days[i + 2]] = [-more, -moreshare] return added
Field('termino_confirmacao', 'date', label='Término Confirmação', comment="Data a partir da qual o período de confirmação se encerra. Quando utilizado em paralelo a lista de espera, é uma boa prática que esta data seja um ou dois dias antes do início da atividade, este tempo serve para as pessoas se informaram a respeito de sua vaga. Note que se deixado em branco a confirmação vai até o inicio da atividade."), Field('limitantes', 'list:string', label='Combinações possíveis', comment='Este campo serve para limitar o número de atividades que uma pessoa pode se inscrever em um evento. Informe em cada linha da tabela uma combinação possível. Por exemplo, para limitar a uma palestra e 1 curso digite "um" em palestra e em curso na primeira linha, e caso existam outras opções, insira novas linhas com suas respectivas combinações.'), Field('num_chamadas', 'integer', label='Número de listas de presença', comment='Estimativa do número de vezes que se passará a lista de presença durante a atividades.'), # Field('balanco_id', 'integer'), # Field('configuracao_id', 'integer'), Field('divulgar', 'boolean', comment="Quando marcado, todos poderão ver esta atividade."), Field('slug', 'string', compute=lambda r: IS_SLUG()(r.nome)[0] ), format = lambda row: db_utils.atividade_format(db, row), ) db.define_table('atividade_periodo', Field('atividade_id', 'reference atividade', required=True), Field('inicio', 'datetime', required=True), Field('termino', 'datetime', required=True), format=lambda r: "%s %s" %(date2str(r.inicio), date2str(r.termino) ) , ) db.define_table('divisao', Field('grupo_id', 'integer'), Field('nome', 'string'), ) db.define_table('lotacao', Field('divisao_id', 'integer'), Field('organizacao_id', 'integer'), Field('pessoa_id', 'reference pessoa'), )
def periodos_shortcut(db,atividade): periodos={} for p in db(db.atividade_periodo.atividade_id==atividade).select(orderby=db.atividade_periodo.inicio): inicio = p.inicio.date() termino = p.termino.date() if periodos.has_key(inicio): periodos[inicio]+=[p.inicio.time()] else: periodos[inicio]=[p.inicio.time()] if periodos.has_key(termino): periodos[termino]+=[p.termino.time()] else: periodos[termino]=[p.termino.time()] t='<table class="table table-bordered">' for data, horas in periodos.items(): hrs=[] for i,h in enumerate(horas[::2]): hrs.append( ' - '.join(map(date2str,horas[i*2:2*(i+1)])) ) n = len(hrs) t+='<tr><td rowspan="%s" style="vertical-align:middle;" align="center" class="col-xs-5"><b>%s</b></td> <td align="center" class="col-xs-7">%s</td> </tr>' %(n, date2str(data),hrs[0]) for h in hrs[1:]: t+='<tr><td align="center">%s</td></tr>' %h t+='</table>' # t += date2str(date) # date2 = p.inicio.date() # if date==p.termino.date() and date2==date: # inicio = p.inicio.time() # termino = p.termino.time() # t+=" %s - %s" %(date2str(inicio),date2str(termino) ) # else: # t+='<br/>' # date = p.inicio.date() # if np > 2: # periodos = [periodos[0],"...",periodos[np-1]] return XML(t)#''.join(['%s<br />' %db.atividade_periodo._format(periodo) for periodo in periodos or []]))