示例#1
0
def get_week_agenda(model, queryset, start_date):
    """
    Get list of events that will occur in the given week.

    :param queryset: EventInstance queryset
    :param start_date: period start_date
    :type start_date: datetime.datetime()
    :return: data dictionary
    """
    period = Week(start_date.year, start_date.date().isocalendar()[1])
    end_date = utils.date_to_datetime(period.sunday(), 'max')
    start_date = utils.date_to_datetime(period.monday())
    return {
        'start_date':
        start_date,
        'end_date':
        end_date,
        'scope':
        'Week',
        'items':
        model.objects.in_date_range(start_date,
                                    end_date).filter(event__in=queryset),
        'next_date':
        start_date + timedelta(days=7),
        'previous_date':
        start_date + timedelta(days=-7),
    }
示例#2
0
 def scrapper(self) -> str or None:
     date = Week(self.year_no, self.week_no)
     month = date.day(0).month
     options = webdriver.ChromeOptions()
     options.add_argument("--no-sandbox")
     options.add_argument("--disable-dev-shm-usage")
     options.add_argument("--headless")
     browser = webdriver.Chrome(
         options=options, executable_path=conf.CHROME_DRIVER_PATH
     )
     log(log.INFO, "Start get url Norfolk Southern")
     browser.get(self.URL)
     log(log.INFO, "Get url Norfolk Southern")
     generated_html = browser.page_source
     soup = BeautifulSoup(generated_html, "html.parser")
     tags = soup.find_all("a")
     log(log.INFO, "Get all links Norfolk Southern")
     link = [
         link.attrs["href"]
         for link in tags
         if f"weekly-performance-reports/{self.year_no}/investor-weekly-carloads"
         in link.attrs["href"]
     ]
     if not link:
         log(log.WARNING, "Links not found")
         return None
     log(log.INFO, "Get link with pdf for Norfolk Southern")
     link = "http://www.nscorp.com" + link[month - 1]
     log(log.INFO, "Found pdf link: [%s]", link)
     return link
示例#3
0
def week_display():
    # Default view is the current week. 
    if session.week is None:
        session.week = Week.thisweek()[1]
        session.year = date.today().year

    week = session.week
    year = session.year

    # some years end in week 53, others in week 52
    lastweekofyear = Week.last_week_of_year(year)[1]
    # If it is the last week of the year, fix forward button
    if lastweekofyear == week:
        forward = {"week":1,"year":year + 1}
    else:
        forward = {"week":week + 1,"year":year}
    # If it is the first week of the year, fix back button
    if week == 1:
        back = {"week":Week.last_week_of_year(year - 1)[1],"year":year - 1}
    else:
        back = {"week":week - 1,"year":year}

    # Our startdate will be current week, beginning with monday
    # set remaining sessions to new values and move on
    session.startday = Week(year, week).monday()
    session.back = back
    session.forward = forward
    session.week = week
    session.year = year 
示例#4
0
def validate_period(period, first_date):
    '''
    make sure only period is  between first_date and today
    '''  
    today = datetime.now().strftime('%Y%m%d')

    # Day yyyyMMdd
    if type_of_period(period) == 'day':
        if period >= first_date and period <= today:
            return True
    
    # Week yyyy-Www
    elif type_of_period(period) == 'week':
        this_week = Week.thisweek()
        period_week = Week.fromstring(period)
        first_date_week = Week.withdate(datetime.strptime(first_date, '%Y%m%d'))
        if period_week >= first_date_week and period_week <= this_week:
            return True

    # Month yyyyMM
    elif type_of_period(period) == 'month':
        this_month       = datetime.now().strftime('%Y%m')
        period_month     = period[0:6]
        first_date_month = first_date[0:6]
        if period_month >= first_date_month and period_month <= this_month:
            return True
        
    return False
示例#5
0
def google_kursk(year,week,FraudOrder):
    credentials = 'templates/js/client_secret.json' 
    scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
    credentials = ServiceAccountCredentials.from_json_keyfile_name(credentials, scope)
    gc = gspread.authorize(credentials)
    wks=gc.open_by_key("1eYS1QbeYS3E_zV3uagBjvIt25xYLWsLbztl8sd9uG5w") 
    date_from, date_to = Week(int(year), int(week)).monday().strftime('%Y%m%d'),Week(int(year),int(week)).sunday().strftime('%Y%m%d')
    name_sheet = date_from[:4] + '.' + date_from[4:6] + '.' + date_from[6:] + ' - ' + date_to[:4] + '.' + date_to[4:6] + '.' + date_to[6:] 
    check_worksheet_name = 0
    for i in wks.worksheets():
        if i.title != name_sheet:
            pass
        else:
            check_worksheet_name = 1

    if check_worksheet_name == 1:
        pass
    else:
        wks.duplicate_sheet(wks.worksheet('шаблон').id,
                            new_sheet_name=name_sheet) 
    wks.values_update(
    name_sheet + '!A4',
    params={
        'valueInputOption': 'USER_ENTERED'
    },
    body={
        'values': FraudOrder
    }
                        )     
示例#6
0
def get_sparse_schedule(user_id: int):
    if not user_util.get_from_id(user_id):
        return api_error_helpers.item_not_found("user", "id", user_id)

    start_str = request.args.get("start_week", default=None, type=str)
    end_str = request.args.get("end_week", default=None, type=str)
    year = request.args.get("year", default=None, type=int)

    if (start_str or end_str) and year:
        return api_error_helpers.invalid_url_args_combination(
            ["start_str", "end_str", "year"])
    if not ((start_str and end_str) or year):
        if not (start_str and end_str):
            return api_error_helpers.missing_url_arg("start_week and end_week")
        else:
            return api_error_helpers.missing_url_arg("year")

    start_week = Week.fromstring(start_str).toordinal() if start_str else None
    end_week = Week.fromstring(end_str).toordinal() if end_str else None

    if year:
        start_week = Week(year, 1)
        end_week = Week.last_week_of_year(year)

    schedule_map = schedule_util.get_user_schedules(user_id, start_week,
                                                    end_week)

    return jsonify(list(sched.serialize() for sched in schedule_map.values()))
示例#7
0
    def post(self, request, *args, **kwargs):
        year = kwargs.get('year') or datetime.datetime.now().year
        week = kwargs.get('week') or Week.thisweek().week

        if week < 1 or week > Week.last_week_of_year(year).week:
            raise Http404('Invalid week / year.')

        next_year, next_week = self.calc_next(year, week)
        previous_year, previous_week = self.calc_previous(year, week)

        row_formset = self.form_class(request.POST)

        if row_formset.is_valid():
            row_formset.save()
            success_url = reverse('home-param', args=(year, week))
            return HttpResponseRedirect(success_url)

        create_row_form = RowModelForm()

        return render(
            request, self.template_name, {
                'create_row_form': create_row_form,
                'row_formset': row_formset,
                'week': week,
                'year': year,
                'next_week': next_week,
                'next_year': next_year,
                'previous_week': previous_week,
                'previous_year': previous_year
            })
示例#8
0
 def get(_, week=None):
     # Make your own library for ISO week parsing. this one sucks
     if not week:
         week = Week.withdate(datetime.now())
     else:
         try:
             ws = week.split("-")
             if len(ws) == 3:
                 week = "".join(ws[0:-1])
             week = Week.fromstring(week)
         except ValueError:
             return (
                 FailResponse(
                     week="week path variable must be a proper ISO week date"
                 ),
                 400,
             )
     try:
         token = Token(request.headers.get("X-API-KEY"))
     except:
         return FailResponse(token="malformed token"), 400
     units = []
     if token:
         try:
             monday = datetime.combine(week.monday(), datetime.min.time())
             units = lesson_units(token, monday)
             units = list(map(serialize_unit, units))
             return SuccessResponse(units=units, week=week.isoformat())
         except AuthorizationError as e:
             return ErrorResponse(str(e)), 403
     else:
         return ErrorResponse("Unauthorized"), 401
示例#9
0
    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
示例#10
0
    def get(self, request, *args, **kwargs):
        year = kwargs.get('year') or datetime.datetime.now().year
        week = kwargs.get('week') or Week.thisweek().week

        if week < 1 or week > Week.last_week_of_year(year).week:
            raise Http404('Invalid week / year.')

        next_year, next_week = self.calc_next(year, week)
        previous_year, previous_week = self.calc_previous(year, week)

        rows = RowModel.objects.filter(year=year, week=week)
        row_formset = self.form_class(queryset=rows)

        create_row_form = RowModelForm()

        return render(
            request, self.template_name, {
                'create_row_form': create_row_form,
                'row_formset': row_formset,
                'week': week,
                'year': year,
                'next_week': next_week,
                'next_year': next_year,
                'previous_week': previous_week,
                'previous_year': previous_year
            })
示例#11
0
文件: stats.py 项目: sungitly/isr
def convert_to_catergory_str(year, week):
    isoweek = Week(year, week)
    monday = isoweek.monday()
    sunday = isoweek.sunday()
    return monday.strftime(
        DATE_FORMAT_SHORT_MONTH_DAY) + '~' + sunday.strftime(
            DATE_FORMAT_SHORT_MONTH_DAY)
示例#12
0
def postWeek(inputYearWeek, gapWeek):
   # inputYearWeek.astype("str")
    # gapWeek.astype("int")
    inputYearWeek=str(inputYearWeek)
    gapWeek =int(gapWeek)
    currYear = int(inputYearWeek[0:4])
    currWeek = int(inputYearWeek[4:6])
    
    maxWeek = Week.last_week_of_year(currYear).week
    
    if(maxWeek <currWeek +gapWeek):
        iterGap = gapWeek +currWeek - maxWeek
        iterYear = currYear +1 
        
        iterWeek = Week.last_week_of_year(iterYear).week
        
        while iterGap >0:
            if iterWeek < iterGap:
                iterGap = iterGap- iterWeek
                iterYear = iterYear +1 
                iterWeek = Week.last_week_of_year(iterYear).week
            else:
                iterWeek = iterGap 
                iterGap =0 
        
        return  str(iterYear)+"{:02d}".format(iterWeek)
    else:
        return str(currYear) +"{:02d}".format(currWeek+gapWeek)
示例#13
0
def preWeek(inputYearWeek,gapWeek):

    inputYearWeek=str(inputYearWeek)
    gapWeek =int(gapWeek)
    currYear = int(inputYearWeek[0:4])
    currWeek = int(inputYearWeek[4:6])
    
    #calendar.setTime(dateFormat.parse(currYear + "1231"));
    Week.last_week_of_year(currYear).week
    
    if(currWeek <=gapWeek):
        iterGap= gapWeek -currWeek
        iterYear = currYear -1
        
        iterWeek= Week.last_week_of_year(iterYear).week
        
        while iterGap >0:
            if iterWeek <= iterGap:
                iterGap = iterGap -iterWeek
                iterYear = iterYear - 1
                iterWeek = Week.last_week_of_year(iterYear).week
            else:
                iterWeek = iterWeek - iterGap
                iterGap =0 
                
        
        return str(iterYear)+"{:02d}".format(iterWeek)
    else:
        resultYear = currYear
        resultWeek = currWeek -gapWeek
        
        return str(resultYear)+"{:02d}".format(resultWeek)
示例#14
0
    def get_menus_list(self):
        r = requests.get("https://sites.google.com/site/fedorestbe/menu-fr/menu-noga-fr")

        soup = BeautifulSoup(r.content, "lxml")

        current_week = Week.thisweek().week
        current_year = Week.thisweek().year

        content = ""

        content += "Voici les menus disponibles concoctes par les chefs Fedorest. Nous sommes en semaine {}-{} : \n".format(current_year, current_week)

        link_cells = soup.find_all("td", {"class": "td-file"})
        regex = r"noga_fr_(\d+)_(\d+)\.pdf"

        for cell in link_cells:
            links = cell.find_all("a")
            for link in links:
                url = link.get("href")
                matches = re.findall(regex, url)
                if matches:
                    (week, year) = matches[0]
                    content += "* ["+year + "-"+week + "](" + GOOGLE_SITE_BASE + url + ")\n"

        return content
示例#15
0
def trips_affecting_the_bonus_plan(city_id, date_start, date_end,
                                   city_bonus_plan_dict):
    date_format = "%Y-%m-%d"
    city_id = str(city_id)
    nedels = []
    a = dt.strptime(date_start, date_format)
    b = dt.strptime(date_end, date_format)
    delta = b - a

    for i in range(delta.days + 1):
        year, month, day = (
            (dt.strptime(date_start, date_format) +
             timedelta(days=i)).strftime(date_format)).split('-')
        nedel = datetime.date(int(year), int(month), int(day)).isocalendar()[1]
        if [year, nedel] not in nedels:
            nedels.append([year, nedel])
    for i in nedels:
        year = i[0]
        week = i[1]
        date_from, date_to = (Week(
            int(year), int(week)).monday().strftime('%Y%m%d')), (Week(
                int(year), int(week + 1)).monday().strftime('%Y%m%d'))
        min_trips_for_bonus = city_bonus_plan_dict[-1][0]
        TotalFraudTable_ned(date_from, date_to, city_id, week, year,
                            min_trips_for_bonus, city_bonus_plan_dict)

    return
示例#16
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     start = self.fields['start']
     cw = Week.thisweek()
     choices = [str(w + cw.week) for w in Week.weeks_of_year(cw.year)]
     start.choices = zip(choices, choices)
     start.initial = cw+1
示例#17
0
    def execute_goals(self):

        week_day = datetime.datetime.now().isocalendar()[1]
        w = Week(datetime.datetime.now().year, week_day)
        start_date = w.monday()
        end_date = w.sunday()

        result = Records.objects.filter(
            create_date_time__date__range=(start_date, end_date),
            type_entry__id=1).annotate(total_value=Sum("debit"))

        try:

            total_debit = 0
            for a in result:
                total_debit += a.total_value if a.total_value else 0

            logging.warning(f"total_debit: {total_debit}")

            can_use = 770 - total_debit

            loop = asyncio.get_event_loop()

            bot = telepot.aio.Bot(settings.TELEGRAM_TOKEN)

            loop.run_until_complete(
                bot.sendMessage(
                    self.user_id,
                    f"Você ainda pode gastar {can_use} doas 770 reais estipulados para a semana."
                ))

        except BaseException as e:
            logging.exception("Error na meta", e)
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 handle_noargs(self, **options):
        translation.activate('fr')

        week_limit = Week.withdate(Week.thisweek().day(settings.VALIDATING_DAY_OF_WEEK) + relativedelta(days=settings.DELAY_BETWEEN_DEFINITON_N_DELIVERY))
        deliveries = models.Delivery.objects.filter(date__lte=week_limit, status='P', subscription__enabled=True).order_by('subscription__customer__account__email')
        count=0

        for delivery in deliveries:
            logger_delivery = logging.getLogger('[%d]' % delivery.id)

            subscription = delivery.subscription
            customer = subscription.customer

            logger_delivery.info(delivery.__unicode__())

            for content in delivery.content_set.all():
                __extent = content.extent

                logger_content = logging.getLogger('[%d] [%20s] [%c] [%3s%%]' % (delivery.id, content.product.name[:20], '*' if content.customized else ' ', __extent))

                for contentproduct in content.contentproduct_set.all():
                    logger_content.info('%d x %20s (%4d) %s' % (contentproduct.quantity, contentproduct.product.name[:20], contentproduct.product.id, contentproduct.product.main_price.supplier_product_url))
                    if options['browse']:
                        webbrowser.open(contentproduct.product.main_price.supplier_product_url)
                        count += 1
                        if count >= options['pages']:
                            count = 0
                            try:
                                input()
                            except KeyboardInterrupt:
                                print('Interrupted'); sys.exit()

            logger_delivery.info('')

        translation.deactivate()
示例#20
0
    def getPrevWeekString(weekString):

        annee = int(weekString[:4])
        # on récupère le numéro de la semaine
        sem = int(weekString[-2:])

        week = Week(annee, sem)
        lundi = week.monday()

        dimanchePrecedent = lundi + timedelta(days=-1)

        previousYear = dimanchePrecedent.strftime("%Y")

        if (int(previousYear) == annee):
            if (sem - 1) <= 9:
                prevWeekString = previousYear + "0" + str(sem - 1)
            else:
                prevWeekString = previousYear + str(sem - 1)

        else:
            prevWeekNum = dimanchePrecedent.isocalendar()[1]
            if prevWeekNum <= 9:
                prevWeekString = previousYear + "0" + str(prevWeekNum)
            else:
                prevWeekString = previousYear + str(prevWeekNum)

        return prevWeekString
示例#21
0
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
示例#22
0
    def handle_noargs(self, **options):
        translation.activate('fr')

        logging.debug('Command in progress')

        week_limit = Week.withdate(Week.thisweek().day(settings.VALIDATING_DAY_OF_WEEK) + relativedelta(days=settings.DELAY_BETWEEN_DEFINITON_N_DELIVERY))

        # first changed the status of expired deliveries
        deliveries_canceled = models.Delivery.objects.filter(date__lt=week_limit, status='w', subscription__enabled=True)
        for delivery in deliveries_canceled:
            delivery.status = 'e'
            delivery.save()
            logging.debug('delivery %d expired' % delivery.id)

        # secondly, get all the deliveries with a date higher or equal to J+9 and lesser than J+9+7 with a waiting status and a subscription which accepts direct debit.
        deliveries = models.Delivery.objects.filter(date__gte=week_limit, date__lt=week_limit+1, status='w', subscription__direct_debit=True, subscription__enabled=True)

        for delivery in deliveries:
            delivery.status = 'p'
            try:
                delivery.save()
            except ValueError as e:
                logging.debug('delivery %d not payed' % delivery.id)
            else:
                logging.debug('delivery %d payed' % delivery.id)

        translation.deactivate()
示例#23
0
class WeekView(AjaxableViewMixin, CalendarMixin, ListView):
    model = events.Event
    context_object_name = 'events'

    template_name = 'gamenightplanner/calendar/week.html'

    def dispatch(self, request, year, week, *args, **kwargs):
        self.week = Week(int(year), int(week))
        return super().dispatch(request, *args, **kwargs)

    def get_queryset(self):
        return self.model.objects.filter(date__date__gte=self.week.monday(),
                                         date__date__lte=self.week.sunday())

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['year'] = self.week.year
        context['month'] = self.week.monday().month
        context['week'] = self.week
        context['daysofweeknames'] = self.DAYSOFWEEK
        context['daysofweekshort'] = self.DAYSOFWEEK_SHORT
        context['current_url'] = self.week_link(self.week)
        context['next_url'] = self.week_link(self.week+1)
        context['prev_url'] = self.week_link(self.week-1)
        return context
示例#24
0
def format_week(week):
    week = week.lower()

    if "-" in week:
        week_list = week.split("-")
    elif "/" in week:
        week_list = week.split("/")
    elif "w" in week:
        week_list = week.split("w")
    else:
        week_list = ["", week]

    if "w" in week_list[0]:
        week_number = week_list[0].replace("w", "").rjust(2, "0")
        year = ("20" +
                week_list[1]) if len(week_list[1]) == 2 else week_list[1]
    else:
        week_number = week_list[1].replace("w", "").rjust(2, "0")
        year = "20" + week_list[0] if len(week_list[0]) == 2 else week_list[0]

    if not year:
        this_week = Week.thisweek()
        if int(week_number) < this_week.week:
            year = str(this_week.year + 1)
        else:
            year = str(this_week.year)

    return Week.fromstring(year + "W" + week_number)
示例#25
0
def validate_period(period, first_date):
    '''
    make sure only period is  between first_date and today
    '''
    today = datetime.now().strftime('%Y%m%d')

    # Day yyyyMMdd
    if type_of_period(period) == 'day':
        if period >= first_date and period <= today:
            return True

    # Week yyyy-Www
    elif type_of_period(period) == 'week':
        this_week = Week.thisweek()
        period_week = Week.fromstring(period)
        first_date_week = Week.withdate(datetime.strptime(
            first_date, '%Y%m%d'))
        if period_week >= first_date_week and period_week <= this_week:
            return True

    # Month yyyyMM
    elif type_of_period(period) == 'month':
        this_month = datetime.now().strftime('%Y%m')
        period_month = period[0:6]
        first_date_month = first_date[0:6]
        if period_month >= first_date_month and period_month <= this_month:
            return True

    return False
示例#26
0
 def create_deliveries(self):
     s, e = Week.fromstring(str(self.start)), Week.fromstring(str(self.end))
     if self.receive_only_once:
         d = self.delivery_set.create(date=s)
     else:
         for i in range(0, e+1-s, self.frequency):
             d = self.delivery_set.create(date=s+i)
示例#27
0
文件: views.py 项目: sergey998/sxway
    def weekly_report(self, request):
        """ Gets data from database and formats weekly report """
        # weeks sum and average aggregation
        # NOTE: only works with sqlite
        weeks = Expense.objects.filter(user=request.user).extra({
            "week": "strftime('%Y%W', datetime)"}).values('week').\
            order_by('week').annotate(total=Sum('amount'),
                                      average=Avg('amount'),
                                      count=Count('amount'))
        weeks = {w['week']: w for w in weeks}

        # expenses per week
        # NOTE: only works with sqlite
        weeks_expenses = Expense.objects.filter(user=request.user).extra(
            {"week": "strftime('%Y%W', datetime)"}).order_by('datetime')

        # adjusting data
        for expense in weeks_expenses:
            week = weeks[expense.week]
            if 'expenses' not in week:
                week['expenses'] = []
            week['expenses'].append(ExpenseSerializer(expense).data)

            week['initialDate'] = Week(int(week['week'][:4]),
                                       int(week['week'][4:]) + 1).monday()
            week['finalDate'] = Week(int(week['week'][:4]),
                                     int(week['week'][4:]) + 1).sunday()

        return Response(sorted(weeks.values(), key=lambda x: x['week']))
示例#28
0
    def get_data(self, year):
        type_comanys = [
            dict(pk=i.pk, name=i.name) for i in TypeCompany.objects.all()
        ]
        data = []
        _range = Week.last_week_of_year(year)[1]
        for i in range(_range):
            number = i + 1
            date_list = Week(year, number).days()
            month = self.get_month_from_week(date_list)
            first, last = DateInsopesca(year,
                                        number).get_date_range_from_week()
            data.append(
                dict(range_week=f'{first} a {last}',
                     inspections_total=[],
                     month=month,
                     total_col=0))
            for type_comany in type_comanys:
                inspection_total = 0
                companys = Company.objects.filter(
                    type_company=type_comany['pk'])
                for company in companys:
                    inspections = company.get_inspections(
                        f'{year}-{number}', f'{year}-{number}')
                    inspection_total += len(inspections)
                data[i]['inspections_total'].append(inspection_total)
                data[i]['total_col'] += inspection_total

        total = 0
        for tot in data:
            total += tot['total_col']
        return data, type_comanys, total
    def test_mix_max(self):
        self.assertEqual(Week.min, Week(1, 1))
        self.assertEqual(Week.max, Week(9999, 52))
        self.assertEqual(Week.resolution.days, 7)

        self.assertRaises(ValueError, lambda: Week.min - 1)
        self.assertRaises(ValueError, lambda: Week.max + 1)
示例#30
0
def _task_completed(user_id, task_id, year, week_number):
    
    """ Return true if a task is completed for this specific user and week """
    
    week = Week(year, week_number)
    monday = week.monday().isoformat()
    next_monday = week.sunday() + timedelta(days=1)
    return _db.is_task_completed(user_id, task_id, monday, next_monday)
示例#31
0
 def duration2(self):
     if not self.start or not self.end: return None
     s, e = Week.fromstring(self.start).day(1), Week.fromstring(self.end).day(1)
     r = relativedelta(e,s)
     ret = ''
     if r.years: ret += _('%d years, ') % r.years
     if r.months: ret += _('%d months, ') % r.months
     if r.days: ret += _('%d days') % r.days
     return ret
def w_range(start_date):
    weeks_list = []
    startWeek = Week.withdate(start_date)
    endWeek = Week.thisweek()
    int_week = startWeek
    while int_week < endWeek:
        int_week = int_week + 1
        weeks_list.append(int_week)
    return weeks_list
示例#33
0
 def serialize(self):
     return {
         "iso_week": Week.fromordinal(self.week).isoformat(),
         "week_date": Week.fromordinal(self.week).monday().isoformat(),
         "user_id": self.user_id,
         "id": self.id,
         "project_id": self.project_id,
         "hours": self.hours,
     }
示例#34
0
 def save(self, commit=True):
     subscription = super().save(commit=False)
     bw = Week.fromstring(self.cleaned_data['start'])
     ew = Week.withdate( bw.day(1) + relativedelta(months=int(self.cleaned_data['duration'])) )
     subscription.end = ew
     if commit:
         subscription.save()
         subscription.create_deliveries()
     return subscription
示例#35
0
 def get_ordinary_week(iso_week):
     week = {
         'monday': Week.fromstring(iso_week).monday().isoformat(),
         'tuesday': Week.fromstring(iso_week).tuesday().isoformat(),
         'wednesday': Week.fromstring(iso_week).wednesday().isoformat(),
         'thursday': Week.fromstring(iso_week).thursday().isoformat(),
         'friday': Week.fromstring(iso_week).friday().isoformat()
     }
     return week
示例#36
0
def home(request, year=None, week=None):
    if not year or not week:
        # use previous week by default
        week = Week.thisweek() - 1
    else:
        week = Week(int(year), int(week))

    date_range = get_date_range(week)

    # absolute worst titles
    worst_titles = NewsItem.objects.filter(
        published__range=date_range,
        score__isnull=False).order_by('-score')[:5]

    # worst sites on average
    site_avg = Site.objects.filter(
        newsitems__published__range=date_range,
        newsitems__score__isnull=False).annotate(
            score=Avg('newsitems__score')).order_by('-score')[:5]

    # biggest percentage of bad titles
    sites = Site.objects.filter(newsitems__published__range=date_range,
                                newsitems__score__isnull=False).annotate(
                                    bad=Sum(
                                        Case(When(newsitems__score__gt=1.0,
                                                  then=1),
                                             output_field=IntegerField())),
                                    total=Count('newsitems__score'),
                                )

    percentages = []

    # calculate percentages
    for site in sites:
        bad = float(site.bad if site.bad else 0)
        total = float(site.total if site.total else 0)

        percentage = int((bad / total) * 100)

        percentages.append((percentage, site))

    # sort by percentage and take top 5
    percentages = list(reversed(sorted(percentages, key=lambda x: x[0])))[:5]

    context = {
        'worst_titles': worst_titles,
        'site_avg': site_avg,
        'bad_percentages': percentages,
        'date_range': {
            'week': week,
            'start': date_range[0].date(),
            'end': date_range[1].date(),
        }
    }

    return render(request, 'home.html', context)
示例#37
0
async def weekly_formula(start: date, end: date, *cuts: Cut) -> Iterator[Sales]:
    first = Week.withdate(start) + 1
    last = Week.withdate(end) + 1
    start = first.monday()

    if last.day(lm_pk620.weekday) < lm_pk620.latest:
        last -= 1

    records = await Repository(lm_pk620).query(start, last.saturday(), *report_sections(*cuts))
    return map(parse_record, records)
示例#38
0
def get_deliveries_from_subscription(subscription_data):
    receive_only_once = subscription_data.get('receive_only_once')
    bw = Week.fromstring(str(subscription_data.get('start')))
    ew = Week.withdate( bw.day(1) + relativedelta(months=int(subscription_data.get('duration'))) )
    nb = len(range(0, ew+1-bw, int(subscription_data.get('frequency'))))
    init_price = subscription_data.get('size').default_price().price
    prices = get_deliveries(nb, init_price)
    if receive_only_once: prices = np.array([prices[0]])
    deliveries = [(i+1, '%s (%s %s)' % ((bw+i*2).day(settings.DELIVERY_DAY_OF_WEEK).strftime('%d-%m-%Y'), _('Week'), (bw+i*2).week), p) for i,p in enumerate(prices)]
    return deliveries, prices
示例#39
0
async def weekly_negotiated(start: date, end: date, *cuts: Cut) -> Iterator[Sales]:
    first = Week.withdate(start)
    last = Week.withdate(min(date.today(), end))
    start = first.monday()

    if last.day(lm_pk610.weekday) < lm_pk610.latest:
        last -= 1

    records = await Repository(lm_pk610).query(start, last.saturday(), *report_sections(*cuts))
    return map(parse_record, records)
示例#40
0
文件: views.py 项目: Dandresfs/sican
    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)
示例#41
0
def get_ini_and_end_date(g: Goal) -> Tuple:

    if g.period == 1:
        week_day = datetime.datetime.now().isocalendar()[1]
        w = Week(datetime.datetime.now().year, week_day)
        start_date = w.monday()
        end_date = w.sunday()

        return start_date, end_date

    raise Exception("Invalid goal.")
示例#42
0
    def __init__(self, **kwargs):
        for k, v in kwargs.iteritems():
            self.__setattr__(k, v)

        if kwargs["archive_date"]:
            self.archive_week = Week.withdate(kwargs["archive_date"])
            self.lead_time = kwargs["archive_date"] - kwargs["create_date"]
        else:
            self.archive_date = kwargs["last_move_date"]
            self.archive_week = Week.withdate(kwargs["last_move_date"])
            self.lead_time = kwargs["last_move_date"] - kwargs["create_date"]
示例#43
0
def get_week_range(start_date):
    """
    Get the start and end datetimes for the week
    :param start_date: period start_date
    :type start_date: datetime.datetime()
    :return: tuple start_datetime, end_datetime
    """
    period = Week(start_date.year, start_date.date().isocalendar()[1])
    start_date = utils.date_to_datetime(period.monday())
    end_date = utils.date_to_datetime(period.sunday(), 'max')
    return start_date, end_date
示例#44
0
def fix_weekly_date(apps, schema_editor):
    CountryWeeklyStatus = apps.get_model('connection_statistics', 'CountryWeeklyStatus')
    SchoolWeeklyStatus = apps.get_model('connection_statistics', 'SchoolWeeklyStatus')

    for s in SchoolWeeklyStatus.objects.all():
        s.date = Week(s.year, s.week).monday()
        s.save()

    for s in CountryWeeklyStatus.objects.all():
        s.date = Week(s.year, s.week).monday()
        s.save()
示例#45
0
文件: views.py 项目: Dandresfs/sican
    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)
示例#46
0
    def _populate_year(self, year):
        index = year - self.dob.year
        start_week = Week.withdate(date(year, self.dob.month, self.dob.day))
        end_week = Week.withdate(date(year + 1, self.dob.month, self.dob.day))
        next_week = start_week
        weeks = []

        while next_week.monday() < end_week.monday():
            week_info = WeekInfo(next_week)
            weeks.append(week_info)
            self._weeks[next_week] = week_info
            next_week += 1

        self._years[year] = dict(year=year, index=index, weeks=weeks)
示例#47
0
def tracking_calendar(request, year=None, week=None):
    '''
    This view will get parameters from url and will try to generate
    a table of the current week where reminders we get can be tracked.
    '''

    # If there is no year we generate it
    if year == None:
        ryear = date.today().year
    else:
        ryear = int(year)

    # The same with the week
    if week == None:
        rweek = date.today().isocalendar()[1]
    else:
        rweek = int(week)

    # If someone tries to insert manually a week which doesn't exist
    # we return him/her a 403 page (have to change with something else).
    if rweek > '53':
        raise PermissionDenied()

    isoweek = Week(ryear, rweek)
    sqlweek = []

    for x in range(5):
        sqlweek.append(isoweek.day(x))

    try:
        RemindersTable.objects.get(rday=isoweek.day(0))
    except RemindersTable.DoesNotExist:
        for x in range(5):
            RemindersTable.objects.create(rday=isoweek.day(x))

    tableresults = []
    dayrow = []

    for day in sqlweek:
        weekresults = RemindersTable.objects.filter(rday=day)
        for value in weekresults.values_list()[0]:
            dayrow.append(value)
        tableresults.append(dayrow)
        dayrow = []

    headers = weekresults.values().field_names

    return render_to_response("calendar.html", {'sqlweek': sqlweek,
                                                'headers': headers,
                                                'tableresults': tableresults}, RequestContext(request))
示例#48
0
文件: views.py 项目: Dandresfs/sican
    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)
示例#49
0
    def getPartAssignment(self, co=None, numWeekInit=-1, numYearInit=-1, numWeekEnd=-1, numYearEnd=-1):
        '''
        Prend en parametre un ou plusieurs doublets du type : ("nom", "bob") => WHERE NOM='Bob'
        Permet de récupérer un objet python depuis la base de donnée en fonction d'un filtre.
        Le type d'objet retournée varie en fonction de la classe fille qui l'appel.
        '''

        TEMPLATE_WHERE_NAT = Template("select A.ID_WORKER as _worker_num, A.FIRST_NAME as _worker_firstName, A.NAME as _worker_name, A.ADDRESS as _worker_position_address," + \
                                         "E.ID_SITE _phase_site_num, E.NUM_SITE as _phase_site_numSite, E.NUM_WEEK as _phase_numWeek, E.NUM_YEAR as _phase_numYear " + \
                                        "from (select w.ID as ID_WORKER, w.FIRST_NAME, w.NAME, p.ADDRESS " + \
                                                "from WORKER w, POSITION p " + \
                                                "where w.ID_POSITION = p.ID) A, " + \
                                            "(select G.ID_WORKER, D.ID_SITE, D.NUM_SITE, D.NUM_WEEK, D.NUM_YEAR " + \
                                                "from ASSIGNMENT G, (select B.ID_SITE, B.NUM_SITE, C.NUM_WEEK, C.NUM_YEAR, C.ID_PHASE " + \
                                                                    "from (select SITE.ID as ID_SITE, SITE.NUM_SITE " + \
                                                                            "from SITE " + \
                                                                            """where "$dateInit" >= SITE.DATE_INIT and "$dateEnd" <= SITE.DATE_END) B, """ + \
                                                                         "(select PHASE.ID as ID_PHASE, PHASE.NUM_WEEK, PHASE.NUM_YEAR, PHASE.ID_SITE " + \
                                                                             "from PHASE " + \
                                                                             "where $numYearInit <= PHASE.NUM_YEAR and $numYearEnd >= PHASE.NUM_YEAR " + \
                                                                                     "and $numWeekInit <= PHASE.NUM_WEEK and $numWeekEnd >= PHASE.NUM_WEEK) C ) D " + \
                                                "where G.ID_PHASE = D.ID_PHASE) E " + \
                                        "where A.ID_WORKER = E.ID_WORKER")
        
        from isoweek import Week
        d1 = Week(numYearInit, numWeekInit).monday()
        d2 = Week(numYearEnd, numWeekEnd).monday()
        # Construit la requête SQL
        request = TEMPLATE_WHERE_NAT.substitute(dateInit = d1.isoformat(), dateEnd = d2.isoformat(), numYearInit = numYearInit, numYearEnd = numYearEnd, numWeekInit = numWeekInit, numWeekEnd = numWeekEnd)
        if self._verboseMode:
            (request)

        cursor = co[1]

        # execution d'une requete
        cursor.execute(request)

        o = cursor.fetchall()
        if o != None:
            # construit et retourne un Objet du Systeme
            res = set()
            for x in o:
                if self._verboseMode:
                    print(x)
                res.add(self._buildObject(co, x))
            return res
        else:
            return None
示例#50
0
    def __call__(self, wizard, form, step, data, files):
        cart_data = wizard.get_cleaned_data_for_step('cart') or {}

        form.thematic = get_thematic(cart_data)

        if form.thematic:
            for k, f in [('size', form.thematic.size),
                         ('carrier', form.thematic.carrier),
                         ('frequency', form.thematic.frequency),
                         ('start', form.thematic.start_duration)]:
                if f: form.fields[k].initial = f

            if form.thematic.end_duration:
                delta = relativedelta(Week.fromstring(form.thematic.end_duration).day(1),
                                      Week.fromstring(form.thematic.start_duration).day(1))
                form.fields['duration'].initial = delta.months

            if form.thematic.criterias:
                __key = 'thematic_criterias_%d' % form.thematic.id
                form.fields['criterias'].initial = cache.get(__key) or [v.id for v in form.thematic.criterias.all()]
                if not cache.get(__key): cache.set(__key, form.fields['criterias'].initial)

            form.fields['receive_only_once'].initial = form.thematic.receive_only_once
            form.fields['customized'].initial = False

            for field, locked in [('size', form.thematic.locked_size),
                                  ('carrier', form.thematic.locked_carrier),
                                  ('receive_only_once', form.thematic.locked_receive_only_once),
                                  ('frequency', form.thematic.locked_frequency),
                                  ('start', form.thematic.locked_start),
                                  ('duration', form.thematic.locked_duration),
                                  ('criterias', form.thematic.locked_criterias),
                                  ('customized', form.thematic.locked_products)]:
                if locked:
                    attrs = form.fields[field].widget.attrs
                    attrs['class'] = attrs.get('class', '') + ' disabled'
        else:
            form.fields['customized'].initial = True
            attrs = form.fields['customized'].widget.attrs
            attrs['class'] = attrs.get('class', '') + ' disabled'

        form.carriers = cache.get('create_carriers') or models.Carrier.objects.select_related().all()
        if not cache.get('create_carriers'): cache.set('create_carriers', form.carriers)

        form.sizes = cache.get('create_sizes') or models.Size.objects.select_related().order_by('order').all()
        if not cache.get('create_sizes'): cache.set('create_sizes', form.sizes)

        return form
示例#51
0
def calculate_weekly_sales(item_collection_ids, user_tz, year):
    """
    Calculates sales per week for items in the given set of item_collection_ids in a given year,
    in the user's timezone.
    """
    ordered_week_sales = OrderedDict()
    for year_week in Week.weeks_of_year(year):
        ordered_week_sales[year_week.week] = 0
    start_at = isoweek_datetime(year, 1, user_tz)
    end_at = isoweek_datetime(year + 1, 1, user_tz)

    week_sales = db.session.query('sales_week', 'sum').from_statement(db.text('''
        SELECT EXTRACT(WEEK FROM ordered_at AT TIME ZONE 'UTC' AT TIME ZONE :timezone)
        AS sales_week, SUM(final_amount) AS sum
        FROM line_item INNER JOIN item on line_item.item_id = item.id
        WHERE status IN :statuses AND item_collection_id IN :item_collection_ids
        AND ordered_at AT TIME ZONE 'UTC' AT TIME ZONE :timezone >= :start_at
        AND ordered_at AT TIME ZONE 'UTC' AT TIME ZONE :timezone < :end_at
        GROUP BY sales_week ORDER BY sales_week;
        ''')).params(timezone=user_tz, statuses=tuple([LINE_ITEM_STATUS.CONFIRMED, LINE_ITEM_STATUS.CANCELLED]),
        start_at=start_at, end_at=end_at, item_collection_ids=tuple(item_collection_ids)).all()

    for week_sale in week_sales:
        ordered_week_sales[int(week_sale.sales_week)] = week_sale.sum

    return ordered_week_sales
示例#52
0
    def week(self):
        'Returns the start, end-tuple for a week around self.timestamp'
        w = Week.withdate(self.timestamp)
        start = clean_day(local_timezone.localize(datetime.combine(w.monday(), datetime.min.time())))
        end = start + timedelta(days=6, hours=23, minutes=59, seconds=59)

        return (start, end)
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
示例#54
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        cw = Week.withdate(Week.thisweek().sunday() + relativedelta(days=9))
        start = self.fields['start']
        start_choices = [str(w + cw.week - 1) for w in Week.weeks_of_year(cw.year)]
        start_date_choices = ['%s (%s %s)' % ((w + cw.week - 1).day(settings.DELIVERY_DAY_OF_WEEK).strftime('%d-%m-%Y'), _('Week'), (w + cw.week - 1).week) for w in Week.weeks_of_year(cw.year)]
        start.choices = zip(start_choices, start_date_choices)
        start.initial = cw

        for field in ['size', 'frequency', 'duration', 'start']:
            self.fields[field].widget.attrs['class'] = 'slidebar-select'

        for field in ['criterias', 'receive_only_once']:
            self.fields[field].widget.attrs['class'] = 'checkbox-select'

        for field in ['carrier']:
            self.fields[field].widget.attrs['class'] = 'radio-select'
示例#55
0
def home(request, year=None, week=None):
    if not year or not week:
        # use previous week by default
        week = Week.thisweek() - 1
    else:
        week = Week(int(year), int(week))

    date_range = get_date_range(week)

    # absolute worst titles
    worst_titles = NewsItem.objects.filter(published__range=date_range, score__isnull=False).order_by('-score')[:5]

    # worst sites on average
    site_avg = Site.objects.filter(
        newsitems__published__range=date_range,
        newsitems__score__isnull=False
        ).annotate(
        score=Avg('newsitems__score')
        ).order_by('-score')[:5]

    # biggest percentage of bad titles
    sites = Site.objects.filter(
        newsitems__published__range=date_range,
        newsitems__score__isnull=False
        ).annotate(
        bad=Sum(Case(When(newsitems__score__gt=1.0, then=1), output_field=IntegerField())),
        total=Count('newsitems__score'),
        )

    percentages = []

    # calculate percentages
    for site in sites:
        bad = float(site.bad if site.bad else 0)
        total = float(site.total if site.total else 0)

        percentage = int((bad/total)*100)

        percentages.append((percentage, site))

    # sort by percentage and take top 5
    percentages = list(reversed(sorted(percentages, key=lambda x: x[0])))[:5]

    context = {
        'worst_titles': worst_titles,
        'site_avg': site_avg,
        'bad_percentages': percentages,
        'date_range': {
            'week': week,
            'start': date_range[0].date(),
            'end': date_range[1].date(),
        }
    }

    return render(request, 'home.html', context)
示例#56
0
def get_yw(str_date, date_format='%Y-%m-%d'):
    """
    get week number within a year, from week 0 to week 52
    :param str_date:
    :param date_format:
    :return:
    """
    date_str = change_format(str_date, in_format=date_format, out_format='%Y-%m-%d')
    date_obj = datetime.strptime(date_str, '%Y-%m-%d')
    w = Week.withdate(date(date_obj.year, date_obj.month, date_obj.day))
    return str(w[0]) + '-' + str(w[1] if w[1] > 9 else '0' + str(w[1]))    #  yyyy-ww
示例#57
0
    def __call__(self, wizard, own_data, form_data, tmp_dict):
        # print('subscription done')

        # print(tmp_dict)

        user = get_user(wizard)
        customer = user.customer
        thematic = get_thematic(form_data['cart'])
        customized = own_data.get('customized', False)

        duration = int(own_data.get('duration'))
        bw = Week.fromstring(own_data.get('start'))
        ew = Week.withdate( bw.day(1) + relativedelta(months=duration) )

        subscription = models.Subscription.objects.create(customer=customer, size=own_data['size'], carrier=own_data['carrier'], receive_only_once=own_data['receive_only_once'], frequency=int(own_data['frequency']), start=bw, end=ew, comment=form_data['comment'].get('comment', ''))

        subscription.criterias = own_data['criterias']

        if thematic and not customized:
            for e in thematic.thematicextent_set.all():
                subscription.extent_set.create(product=e.product, extent=e.extent, customized=False)

        subscription.create_deliveries()

        tmp_dict['subscription'] = subscription

        deliveries = subscription.delivery_set.order_by('date')

        mm.Message.objects.create_message(participants=[customer], subject=_('Votre abonnement %(subscription_id)d a été crée') % {'subscription_id': subscription.id}, body=_(
"""Bonjour %(name)s,

Nous sommes heureux de vous annoncer que votre abonnement %(subscription_id)d a été crée, il est accessible à l'adresse suivante :

http://www.vegeclic.fr/carts/subscriptions/%(subscription_id)d/deliveries/

Bien cordialement,
Végéclic.
"""
        ) % {'name': customer.main_address.__unicode__() if customer.main_address else '', 'date': deliveries[0].get_date_display(), 'subscription_id': subscription.id})

        return True
示例#58
0
    def get_year_ago(self, dia=None, yearsago=None):
        if not dia:
            dia = self.day_present

        years_ago = self.years_ago
        if yearsago:
            years_ago = int(yearsago)

        logger.debug("Calculating {} year ago for {}".format(years_ago, dia))

        current = dia.isocalendar()  # 0 year, 1 week, 2, weekday
        year = current[0]
        week = current[1]
        weekday = current[2] - 1  # Isocalendar uses american weekdays

        week_current = Week(year, week)

        week_past = week_current.replace(year - years_ago, week)

        past_new = self.ensure_same_day_scenario(
            week_current, week_past, weekday)

        if past_new:
            self.day_year_ago = datetime.combine(past_new, datetime.min.time())
        else:
            self.day_year_ago = datetime.combine(
                week_past.day(weekday), datetime.min.time())

        logger.debug("SUMMARY")

        logger.debug(" - Present day: {}".format(week_current.day(weekday)))

        logger.debug(" - Past day ini: {}".format(week_past.day(weekday)))

        logger.debug(
            " - Past day correction: {}".format(self.day_year_ago.strftime("%Y-%m-%d")))

        logger.info("{} year ago from {} was {}" .format(years_ago, self.day_present.strftime(
            "%Y-%m-%d"), self.day_year_ago.strftime("%Y-%m-%d")))

        return self.day_year_ago
示例#59
0
    def __call__(self, wizard, form, step, data, files):
        subscription_data = wizard.get_cleaned_data_for_step('subscription') or {}
        if not subscription_data: return form

        user = get_user(wizard)
        if user:
            form.balance = user.customer.wallet.balance_in_target_currency()
            form.balance_inversed = form.balance*-1
            form.currency = user.customer.wallet.target_currency

        form.receive_only_once = subscription_data.get('receive_only_once')
        form.price = subscription_data.get('size').default_price()
        form.price_rate = 1+settings.DEGRESSIVE_PRICE_RATE/100

        bw = Week.fromstring(str(subscription_data.get('start')))
        ew = Week.withdate( bw.day(1) + relativedelta(months=int(subscription_data.get('duration'))) )
        deliveries, prices = get_deliveries_from_subscription(subscription_data)

        form.fields['nb_deliveries'].choices = [(k+1, '%d %s' % (k+1, _('échéance(s)'))) for k in range(len(prices))]

        return form
示例#60
0
def weekly_incidents(inc):
    """

    :param team:
    :return:
    """
    open_week = Week.withdate(dt.datetime.strptime(inc['opened_at'], '%Y-%m-%d %H:%M:%S').date())
    if open_week in incs_by_week.keys():
        incs_by_week[open_week] += 1
        incs_by_week.update({open_week: incs_by_week[open_week]})
    else:
        incs_by_week[open_week] = 1