def get_context_data(self, **kwargs): semana = Semana.objects.get(id=self.kwargs['semana_id']) inicio = Week(semana.creacion.isocalendar()[0],semana.creacion.isocalendar()[1]+1).tuesday() fin = Week(semana.creacion.isocalendar()[0],semana.creacion.isocalendar()[1]+2).monday() kwargs['start_date'] = inicio.strftime("%Y-%m-%d") kwargs['end_date'] = fin.strftime("%Y-%m-%d") kwargs['formador'] = Formador.objects.get(id=self.kwargs['id']).get_full_name() kwargs['numero_semana'] = semana.numero return super(CronogramaFormadorUpdateView,self).get_context_data(**kwargs)
def get_context_data(self, **kwargs): semana = Semana.objects.get(id=self.kwargs['semana_id']) kwargs['informes'] = self.request.user.has_perm('permisos_sican.formacion.cronograma.informes') kwargs['numero_semana'] = Semana.objects.get(id=self.kwargs['semana_id']).numero kwargs['id_semana'] = self.kwargs['semana_id'] inicio = Week(semana.creacion.isocalendar()[0],semana.creacion.isocalendar()[1]+1).monday() fin = Week(semana.creacion.isocalendar()[0],semana.creacion.isocalendar()[1]+1).sunday() kwargs['fechas'] = inicio.strftime("%d de %B del %Y") + ' - ' + fin.strftime("%d de %B del %Y") return super(ListaCronogramasSemanaView,self).get_context_data(**kwargs)
def get_context_data(self, **kwargs): semana = Semana.objects.get(id=self.kwargs['semana_id']) kwargs['formador'] = Formador.objects.get(id=self.kwargs['id']).get_full_name() kwargs['semana_numero'] = semana.numero kwargs['id_semana'] = semana.id x, created = Semana.objects.get_or_create(numero = datetime.datetime.now().isocalendar()[1]+1) inicio = Week(semana.creacion.isocalendar()[0],semana.creacion.isocalendar()[1]+1).monday() fin = Week(semana.creacion.isocalendar()[0],semana.creacion.isocalendar()[1]+1).sunday() kwargs['fechas'] = inicio.strftime("%d de %B del %Y") + ' - ' + fin.strftime("%d de %B del %Y") kwargs['id_formador'] = self.kwargs['id'] return super(CronogramaFormadorView,self).get_context_data(**kwargs)
def decide_forecast_time(timeby, value): if timeby == "Daily": d = "2014" + value[4:] start = parse(d) starti = (parse(d) - parse('2014-1-1')).days * 24 end = parse(d) + timedelta(days=1) endi = starti + 24 elif timeby == "Weekly": d = Week(2011, 40).monday() s = d.strftime("%Y-%m-%d") d = "2014" + s[4:] start = parse(d) starti = (parse(d) - parse('2014-1-1')).days * 24 end = parse(d) + timedelta(days=7) endi = starti + (7 * 24) else: d = get_first_date(value) start = parse(d) starti = (parse(d) - parse('2014-1-1')).days * 24 end = parse(d) + timedelta(days=30) endi = starti + (30 * 24) if end.year == 2015: end = parse("2014-12-31") endi = starti + ((end - parse(d)).days * 24) return start, end, starti, endi
def decide_forecast_time(timeby,value): if timeby == "Daily": d = "2014"+value[4:] start = parse(d) starti = (parse(d)-parse('2014-1-1')).days * 24 end = parse(d)+timedelta(days=1) endi = starti + 24 elif timeby == "Weekly": d = Week(2011, 40).monday() s = d.strftime("%Y-%m-%d") d = "2014"+s[4:] start = parse(d) starti = (parse(d)-parse('2014-1-1')).days * 24 end = parse(d)+timedelta(days=7) endi = starti + (7*24) else: d = get_first_date(value) start = parse(d) starti = (parse(d)-parse('2014-1-1')).days * 24 end = parse(d)+timedelta(days=30) endi = starti + (30*24) if end.year == 2015: end = parse("2014-12-31") endi = starti + ((end-parse(d)).days *24) return start,end,starti,endi
def get_hiatus_weeks(air_weeks): iso_week_nums = [] for week in air_weeks: dt = date(2018, int(week.split('/')[0]), int(week.split('/')[1])) wk = dt.isocalendar()[1] iso_week_nums.append(wk) index = 0 hiatus_week_nums = [] while index < len(iso_week_nums) - 1: if iso_week_nums[index + 1] - iso_week_nums[index] > 1: week_before = iso_week_nums[index] week_after = iso_week_nums[index + 1] weeks_to_add = week_after - week_before - 1 for x in range(weeks_to_add): week_before += 1 hiatus_week_nums.append(week_before) index += 1 hiatus_weeks = [] for week in hiatus_week_nums: d = Week(2018, week).monday() d = d.strftime('%m/%d') hiatus_weeks.append(d) return hiatus_weeks
def get_date_from_index(index, date_format='%Y-%m-%d'): if index in WebsiteVersion.index_dates: date = WebsiteVersion.index_dates[index] else: dirty_date = index.replace('CC-MAIN-', '') dirty_date_parts = dirty_date.split('-') year = int(dirty_date_parts[0]) week_no = int(dirty_date_parts[1]) week_date = Week(year, week_no).monday() date = week_date.strftime(date_format) return date
def decide_time(timeby, value): if timeby == "Daily": d = "2014" + value[4:] start = parse(d) - timedelta(days=3) elif timeby == "Weekly": d = Week(2011, 40).monday() s = d.strftime("%Y-%m-%d") d = "2014" + s[4:] start = parse(d) - timedelta(days=21) else: d = get_first_date(value) start = parse(d) - timedelta(days=90) if start.year == 2013: start = parse("2014-1-1") return start
def decide_time(timeby,value): if timeby == "Daily": d = "2014"+value[4:] start = parse(d)-timedelta(days=3) elif timeby == "Weekly": d = Week(2011, 40).monday() s = d.strftime("%Y-%m-%d") d = "2014"+s[4:] start = parse(d)-timedelta(days=21) else: d = get_first_date(value) start = parse(d)-timedelta(days=90) if start.year == 2013: start = parse("2014-1-1") return start
def _compute_commitment_date_from_week(self, week_number): """ Return friday because friday is the best day """ year, week, day = datetime.now().isocalendar() if week_number < week: # If the week number is smaller than current week number, # jump to the next year year += 1 # week_string = "{}-{}-{}".format(year, week_number, 5) # calculated_day = datetime.strptime(week_string, "%G-%V-%u") # Temporary fix iso_week = Week(year, week_number).day(4) calculated_day_iso = iso_week.strftime("%Y-%m-%d 00:00:00") return calculated_day_iso
def storeData(created, closed, started, team, options): #only do cycle times if data available startedstr = "" started_date = 0 if started != 0: startedstr = started.split('T')[0] started_date = datetime.strptime(startedstr, '%Y-%m-%d') createdstr = created.split('T')[0] closedstr = closed.split('T')[0] created_date = datetime.strptime(createdstr, '%Y-%m-%d') closed_date = datetime.strptime(closedstr, '%Y-%m-%d') isocal = datetime.date(closed_date).isocalendar() closedweek = Week(isocal[0], isocal[1]).monday() weeknum = closedweek.strftime("%Y%m%d") #thruput Teams[team][0][weeknum] += 1 newval = Domains[options[1]][0][weeknum] + 1 domain = options[1] #pprint.pprint("updating domain %s for weeknum %s to %d " % (domain, weeknum, newval)) Domains[options[1]][0][weeknum] += 1 Platforms[options[2]][0][weeknum] += 1 Totals["Totals"][0][weeknum] += 1 leadtime = len(list(get_working_days(created_date, closed_date))) #leadtime Teams[team][1].append(leadtime) Domains[options[1]][1].append(leadtime) Platforms[options[2]][1].append(leadtime) Totals["Totals"][1].append(leadtime) #cycle time if there if started != 0: cycletime = len(list(get_working_days(started_date, closed_date))) Teams[team][2].append(cycletime) Domains[options[1]][2].append(cycletime) Platforms[options[2]][2].append(cycletime) Totals["Totals"][2].append(cycletime)
def storeData(created, closed, started, team, options): startedstr = "" started_date = 0 created_date = cleanDate(created) #print(closed) closed_date = cleanDate(closed) #print(closed_date) isocal = datetime.date(closed_date).isocalendar() #print(isocal) closedweek = Week(isocal[0], isocal[1]).monday() #print(closedweek) weeknum = closedweek.strftime("%Y%m%d") #throughput #print(weeknum) Teams[team][0][weeknum] += 1 #only add up stuff from projects, not teams, otherwise there'd be dupes if options[0] == "project": Totals["Totals"][0][weeknum] += 1 #leadtime leadtime = len(list(get_working_days(created_date, closed_date))) Teams[team][1].append(leadtime) if options[0] == "project": Totals["Totals"][1].append(leadtime) #cycletime is approximatio from assigned date as point at which work started. This is not always true. if str(started) != "0": started_date = cleanDate(started) cycletime = len(list(get_working_days(started_date, closed_date))) Teams[team][2].append(cycletime) if options[0] == "project": Totals["Totals"][2].append(cycletime)
team_instance = 'https://asos.visualstudio.com' connection = VssConnection(base_url=team_instance, creds=credentials) core_client = connection.get_client('vsts.core.v4_0.core_client.CoreClient') wi_client = connection.get_client( 'vsts.work_item_tracking.v4_0.work_item_tracking_client.WorkItemTrackingClient' ) joptions = {'server': 'https://asosmobile.atlassian.net/'} jiras = JIRA(joptions, basic_auth=(jirauser, jirapwd)) #get start date of week #see https://stackoverflow.com/questions/5882405/get-date-from-iso-week-number-in-python startdate = (datetime.today() + timedelta(days=-period)).isocalendar() weekstart = Week(startdate[0], startdate[1]).monday() startweek = weekstart.strftime("%Y%m%d") enddate = datetime.today().isocalendar() endweek = Week(enddate[0], enddate[1]).monday().strftime("%Y%m%d") j = 0 weeks = [] weeks.append(startweek) step = 0 while j < endweek: i = (datetime.today() + timedelta(days=(-period + step))).isocalendar() j = Week(i[0], i[1]).monday().strftime("%Y%m%d") #pprint.pprint(j) weeks.append(j) step += 7
def get_working_days(a, b): rs = rrule.rruleset() rs.rrule(rrule.rrule(rrule.DAILY, dtstart=a, until=b)) # Get all days between a and b rs.exrule( rrule.rrule(rrule.WEEKLY, dtstart=a, byweekday=(rrule.SA, rrule.SU))) # Exclude weekends rs.exrule(get_holidays(a, b)) # Exclude holidays return rs #get start date of week #see https://stackoverflow.com/questions/5882405/get-date-from-iso-week-number-in-python startdate = (datetime.today() + timedelta(days=-period)).isocalendar() weekstart = Week(startdate[0], startdate[1]).monday() startweek = int(weekstart.strftime("%Y%m%d")) enddate = datetime.today().isocalendar() endweek = int(Week(enddate[0], enddate[1]).monday().strftime("%Y%m%d")) #print("endweek:") #print(endweek) j = 0 weeks = [] weeks.append(str(startweek)) step = 0 while j < endweek: i = (datetime.today() + timedelta(days=(-period + step))).isocalendar() j = int(Week(i[0], i[1]).monday().strftime("%Y%m%d")) #pprint.pprint(j)
def trial_balance(currency, groupby, period): if groupby == None: period = datetime.now() lastday = calendar.monthrange(period.year, period.month)[1] year = period.year month = period.month period_beg = datetime(period.year, period.month, 1, 0, 0, 0, 0).strftime('%Y-%m-%d') period_end = datetime(period.year, period.month, lastday, 23, 59, 59, 999999).strftime('%Y-%m-%d') return redirect( url_for('bookkeeping.trial_balance', currency='Satoshis', groupby='Monthly', period='Current')) if groupby == 'Daily': periods = db.session \ .query(\ func.date_part('year', models.LedgerEntries.date), \ func.date_part('month', models.LedgerEntries.date), \ func.date_part('day', models.LedgerEntries.date)) \ .order_by( \ func.date_part('year', models.LedgerEntries.date).desc(), \ func.date_part('month', models.LedgerEntries.date).desc(), \ func.date_part('day', models.LedgerEntries.date).desc()) \ .group_by( \ func.date_part('year', models.LedgerEntries.date), \ func.date_part('month', models.LedgerEntries.date), \ func.date_part('day', models.LedgerEntries.date)) \ .limit(7) periods = sorted([date(int(period[0]), int(period[1]), int(period[2])) for period in periods]) if period == 'Current': period = periods[-1] else: period = datetime.strptime(period, "%Y-%m-%d") period_beg = datetime(period.year, period.month, period.day, 0, 0, 0, 0) period_end = datetime(period.year, period.month, period.day, 23, 59, 59, 999999) periods = sorted([period.strftime("%Y-%m-%d") for period in periods]) period = period.strftime("%Y-%m-%d") elif groupby == 'Weekly': periods = db.session \ .query(\ func.date_part('year', models.LedgerEntries.date), \ func.date_part('week', models.LedgerEntries.date)) \ .order_by( \ func.date_part('year', models.LedgerEntries.date).desc(), \ func.date_part('week', models.LedgerEntries.date).desc()) \ .group_by( \ func.date_part('year', models.LedgerEntries.date), \ func.date_part('week', models.LedgerEntries.date)) \ .limit(7) periods = sorted([Week(int(period[0]), int(period[1])).monday() for period in periods]) if period == 'Current': period = periods[-1] else: period = period.split('-') period = Week(int(period[0]), int(period[1])+1).monday() period_beg = period - timedelta(days = period.weekday()) period_end = period_beg + timedelta(days = 6) period_beg = datetime(period_beg.year, period_beg.month, period_beg.day, 0, 0, 0, 0) period_end = datetime(period_end.year, period_end.month, period_end.day, 23, 59, 59, 999999) periods = sorted([period.strftime("%Y-%W") for period in periods]) period = period.strftime("%Y-%W") elif groupby == 'Monthly': if period == 'Current': period = datetime.now() else: period = datetime.strptime(period, "%Y-%m") lastday = calendar.monthrange(period.year, period.month)[1] period_beg = datetime(period.year, period.month, 1, 0, 0, 0, 0) period_end = period = datetime(period.year, period.month, lastday, 23, 59, 59, 999999) periods = db.session \ .query(\ func.date_part('year', models.LedgerEntries.date), \ func.date_part('month', models.LedgerEntries.date)) \ .group_by( \ func.date_part('year', models.LedgerEntries.date), \ func.date_part('month', models.LedgerEntries.date)) \ .all() periods = sorted([date(int(period[0]), int(period[1]), 1) for period in periods]) periods = sorted([period.strftime("%Y-%m") for period in periods]) period = period.strftime("%Y-%m") elif groupby == 'Annual': if period == 'Current': period = datetime.now() else: period = datetime.strptime(period, "%Y") period_beg = datetime(period.year, 1, 1, 0, 0, 0, 0) period_end = datetime(period.year, 12, 31, 23, 59, 59, 999999) periods = db.session \ .query(func.date_part('year', models.LedgerEntries.date)) \ .group_by(func.date_part('year', models.LedgerEntries.date)) \ .all() periods = sorted([date(int(period[0]), 12, 31) for period in periods]) periods = sorted([period.strftime("%Y") for period in periods]) period = period.strftime("%Y") subaccounts = db.session \ .query( \ models.LedgerEntries.ledger, \ func.sum(models.LedgerEntries.debit), \ func.sum(models.LedgerEntries.credit)) \ .filter(models.LedgerEntries.currency==currency) \ .filter( models.LedgerEntries.date.between(period_beg, period_end)) \ .group_by(models.LedgerEntries.ledger) \ .all() totalDebits = 0 totalCredits = 0 for subaccount in subaccounts: totalDebits += subaccount[1] totalCredits += subaccount[2] return render_template('trial_balance.html', groupby=groupby, currency=currency, periods=periods, period=period, period_beg=period_beg, period_end=period_end, totalDebits=totalDebits, totalCredits=totalCredits, subaccounts=subaccounts)