def enabled_date(self): """docstring for enable_date""" de = '' if ru_strftime(format=u"%Y", date=self.date_end) != "9999": de = u" по %s" % ru_strftime(format=u"%d.%m.%Y", date=self.date_end) return u"c {0}{1}".format(ru_strftime(format=u"%d.%m.%Y", date=self.date_start), de)
def date_ru(date, format): from pytils.dt import ru_strftime if hasattr(settings, format): return ru_strftime(format=getattr(settings, format), date=date, inflected=True) return ru_strftime(date=date)
def date(self): date, format = '', '' f_day, f_month, f_year = u'%d ', u'%B ', u'%Y' if self.start.year == self.finish.year: date = ru_strftime(f_year, date=self.start) else: format = f_year if self.start.month == self.finish.month: date = ru_strftime(f_month, date=self.start, inflected=True) + date else: format = f_month + format if self.start.day == self.finish.day: date = ru_strftime(f_day, date=self.start) + date else: format = f_day + format if format: date = '%s - %s %s' % ( ru_strftime(format, date=self.start, inflected=True), ru_strftime(format, date=self.finish, inflected=True), date ) return date
def date(self): date, format = '', '' f_day, f_month, f_year = u'%d ', u'%B ', u'%Y' if self.start.year == self.finish.year: date = ru_strftime(f_year, date=self.start) else: format = f_year if self.start.month == self.finish.month: date = ru_strftime(f_month, date=self.start, inflected=True) + date else: format = f_month + format if self.start.day == self.finish.day: date = ru_strftime(f_day, date=self.start) + date else: format = f_day + format if format: date = '%s - %s %s' % ( ru_strftime(format, date=self.start, inflected=True), ru_strftime(format, date=self.finish, inflected=True), date) return date
def enabled_date(self): """docstring for enable_date""" if ru_strftime(format=u"%Y", date=self.date_end) == "2099": de = "" else: de = " по %s" % ru_strftime(format=u"%d.%m.%Y", date=self.date_end) return u"c %s%s" % (ru_strftime(format=u"%d.%m.%Y", date=self.date_start), de)
def get_date(self): ''' Formated date ''' today = datetime.date.today() if today.year == self.created.year: return dt.ru_strftime(u'%d %B', self.created, inflected=True) else: return dt.ru_strftime(u'%B %Y', self.created)
def ru_date2(self, date): if date and date != 'False': return dt.ru_strftime(u'%d %B %Y г.', date=datetime.strptime( date, "%Y-%m-%d %H:%M:%S"), inflected=True) return ''
def ru_strftime(date, format="%d.%m.%Y", inflected_day=False, preposition=False): """ Russian strftime, formats date with given format. Value is a date (supports datetime.date and datetime.datetime), parameter is a format (string). For explainings about format, see documentation for original strftime: http://docs.python.org/lib/module-time.html Examples:: {{ some_date|ru_strftime:"%d %B %Y, %A" }} """ try: uformat = utils.provide_unicode(format, encoding, default=u"%d.%m.%Y") ures = dt.ru_strftime(uformat, date, inflected=True, inflected_day=inflected_day, preposition=preposition) res = utils.provide_str(ures, encoding) except Exception, err: # because filter must die silently try: default_date = date.strftime(format) except Exception: default_date = str(date) res = default_value % {'error': err, 'value': default_date}
def ru_strftime(date, format="%d.%m.%Y", inflected_day=False, preposition=False): """ Russian strftime, formats date with given format. Value is a date (supports datetime.date and datetime.datetime), parameter is a format (string). For explainings about format, see documentation for original strftime: http://docs.python.org/lib/module-time.html Examples:: {{ some_date|ru_strftime:"%d %B %Y, %A" }} """ try: res = dt.ru_strftime(format, date, inflected=True, inflected_day=inflected_day, preposition=preposition) except Exception as err: # because filter must die silently try: default_date = date.strftime(format) except Exception: default_date = str(date) res = default_value % {'error': err, 'value': default_date} return res
def get_news(): print 'Fetching %s...' % NEWS_ARCHIVE_LINK r = requests.get(NEWS_ARCHIVE_LINK) et = etree.HTML(r.text) blocks = et.xpath('//div[@class="n_day-video"]/ul/li/div[@class="low"]') news = [] for block in blocks: name = block.xpath('div[@class="video_txt"]/a/text()')[0] link = block.xpath('a/@href')[0] _, date, number = link.rsplit('/', 2) number = int(number) date = date.split('.') date = map(int, date) date = reversed(date) date = datetime.date(*date) date_ru = ru_strftime(format=u'%d %B %Y', date=date, inflected=True) news.append({ 'link': link, 'name': name, 'date': date, 'date_ru': date_ru, 'number': number, }) news.sort(key=lambda new: (new['date'], new['number'])) return news
def render(self, context, instance, placeholder): context.update({ 'schedule' : SchedulePartTime.objects.all().order_by("-id")[0], 'schedule_date' : dt.ru_strftime(u"%d %B", SchedulePartTime.objects.all().order_by("-id")[0].date, inflected=True), 'object' : instance, 'placeholder' : placeholder, }) return context
def setupTemplates(self): _D = lambda x: format_decimal(x, locale="ru_RU") _C = lambda x: format_decimal(x, format='#,##0.00', locale="ru_RU") self.templates.warn = u"""Внимание! Оплата данного счета означает согласие с условиями поставки товара. Уедомление об оплате обязательно. В противном случае не гарантируется наличие товара на складе. Товар отпускается по факту прихода денег на р/с Поставщика. самовывозом при наличии доверенности и паспорта""" def memberTemplate(m): res = u"<b>{m.name}" if m.INN: res += u", ИНН {m.INN}" if m.KPP: res += u", КПП {m.KPP}" res += u", {m.address}" if m.tel: res += u", тел.: {m.tel}</b>" return res.format(m=m) self.templates.memberTemplate = memberTemplate def itemTemplate(item): pStyle = self.param.minStyle return self.Line(item.position, Paragraph(item.name, pStyle), _D(item.quantity), item.units, _C(item.price), _C(item.amount)) self.templates.itemTemplate = itemTemplate self.templates.amountTemplate = lambda amount, due: Paragraph( u"Всего наименований {amount}, на сумму {due} руб.".format( amount=_D(amount), due=_C(due)), self.param.normalStyle) def spellTotal(total): template = u"{rubles} {kopnum:02d} {kopstr}" from pytils import numeral n = {} n['rubles'] = numeral.rubles(int(total)).capitalize() n['kopnum'] = int(total * 100) - int(total) * 100 n['kopstr'] = numeral.choose_plural( n['kopnum'], (u"копейка", u"копейки", u"копеек")) return template.format(**n) self.templates.spellTotal = lambda due: Paragraph( u"<b>{}</b>".format(spellTotal(due)), self.param.normalStyle) self.templates.totalsTableTemplate = lambda total, vat, due: ( ("", u"Итого:", _C(total)), ("", u"В том числе НДС:", _C(vat) if vat else u"Без НДС"), ("", u"Всего к оплате:", _C(due)), ) from pytils.dt import ru_strftime self.templates.invoiceTitle = lambda invoiceNum: \ u"Счет на оплату №{} от {}".format(str(invoiceNum), ru_strftime(u"%d %B %Y", inflected=True, date=self.date))
def pretty_date(date): now_year = datetime.now().year year = date.year if now_year == year: format = '%d %B' else: format = '%d %B %Y' return ru_strftime(format=format, date=date, inflected=True)
def get_period_display(self): if not self.period_date: return self.period lang = get_language() if self.period == 'week': if lang == 'ru': return ru_strftime(u'за нед. до %d %B', self.period_date, inflected=True) else: return self.period_date.strftime('a week before %B, %d') elif self.period == 'month': if lang == 'ru': return ru_strftime(u'%B', self.period_date) else: return self.period_date.strftime('%B') elif self.period == 'quarter': return u'%s %s' % (self.QUARTERS[(self.period_date.month - 1) / 3 + 1], self.period_date.year)
def date_between(start_date, end_date, show_prep=True, always_show_year=False, fmt1=u"%d %B", fmt2=u"%d %B %Y г."): """ Допустимые форматы: "YYYY-MM-DD HH:MM:SS.ssssss+HH:MM", "YYYY-MM-DD HH:MM:SS.ssssss", "YYYY-MM-DD HH:MM:SS+HH:MM", "YYYY-MM-DD HH:MM:SS" """ try: if not isinstance(start_date, datetime): start_date = parseDateTime(start_date) if start_date.day == 2: prep = u'со' else: prep = u'с' if (end_date is None) or (end_date == start_date): if not show_prep: prep = u'' return u"%s %s"%(prep, ru_strftime(fmt2, start_date, inflected=True)) if not isinstance(end_date, datetime): end_date = parseDateTime(end_date) if start_date.year == end_date.year: fmt = fmt1 else: fmt = fmt2 if always_show_year: end_fmt = fmt2 else: end_fmt = fmt return u"%s %s по %s"%(prep, ru_strftime(fmt, start_date, inflected=True), ru_strftime(end_fmt, end_date, inflected=True)) except Exception, E: return unicode(E)
def _get_date(date): pattern = '%Y-%m-%d' if '/' in date: #date_list = str(date).split('/') #d = datetime.date(int(date_list[2]), int(date_list[1]), int(date_list[0])) #d = datetime.strptime(str(date), '%d/%m/%Y') pattern = '%d/%m/%Y' #elif '-' in date: #date_list = str(date).split('-') #d = datetime.date(int(date_list[0]), int(date_list[1]), int(date_list[2])) d = datetime.strptime(str(date), pattern) result = dt.ru_strftime(u"%d %B %Y", d, inflected=True) return result
def printToWord(self): ### Определение переменных для замены в word документе num_dogovor = self.lineEdit_NumDogovor.text() # Номер договора receipt = self.lineEdit_NumReceipt.text() # Номер квитанции fio = self.lineEdit_Fio.text() # ФИО пациента fio_short = self.shorten_to_initials(self.lineEdit_Fio.text()) # Фамилия и инициалы пациента document_name = self.comboBox_Documents.currentText() # Название документа удостоверяющего личность doc_number = self.lineEdit_NumDoc.text() # № документа удостоверяющего личность address = self.lineEdit_Address.text() # Адрес usluga = self.comboBox_Usluga.currentText() # Название услуги summ = self.lineEdit_PriceUsluga.text() # Сумма summ_word = numeral.in_words(int(summ)) # Сумма прописью date_mini = dt.ru_strftime('%d.%m.%Y') # Форматированные текущая дата 01.01.2020 date_full = dt.ru_strftime('%d %B %Y', inflected=True) # Форматированные текущая дата 01 января 2020 ### Формирование и сохранение документа word doc_name = '{}_{}_{}_{}'.format(fio, date_full, num_dogovor, receipt) # Формирование имени документа ФИО_Дата.docx template = r"res\usluga_template.docx" document = MailMerge(template) #print(document.get_merge_fields()) # Какие поля используются в шаблоне document.merge( num_dogovor=num_dogovor, receipt = receipt, fio=fio, fio_short=fio_short, document=document_name, doc_number=doc_number, address=address, usluga=usluga, summ=summ, summ_word = summ_word, date_full = date_full, date_mini = date_mini, ) document.write("docx\{}.docx".format(doc_name,)) os.startfile("docx\{}.docx".format(doc_name,)) # Запуск word документа и печать - os.startfile("res\generated_usluga.docx", "print")
def html_thread(ul): html = u"<ul>" for li in ul: html += u'''<li><div class='comment'> <div class='comment-title'><b>%(username)s</b>, %(date)s написал(а): <a href="javascript:;" comment_id='%(id)s' class="local-link add_comment">Комментировать</a> </div> %(text)s</div>'''%{ 'username': li.username, 'date': dt.ru_strftime(u"%d %B %Y г. в %H:%M", li.date_created, inflected=True), 'text': li.text, 'id': li.id} if li.id in thread: html += html_thread(thread[li.id]) html += u"</li>" html += u"</ul>" return html
def get_down_on_date(self, **kwargs): today = date.today() down = [] current_locale = locale.getdefaultlocale() for month_num in range(12): next_date = today + relativedelta(months=month_num) try: locale.setlocale(locale.LC_ALL, 'en_US.utf8') # locale except Exception: try: locale.setlocale(locale.LC_ALL, 'en') except Exception as e: print('An error setlocale: {0}'.format(e)) en_month = next_date.strftime('%B') try: locale.setlocale(locale.LC_ALL, current_locale) # locale except Exception: try: locale.setlocale(locale.LC_ALL, 'ru') except Exception as e: print('An error setlocale: {0}'.format(e)) ru_month = ru_strftime('%B', next_date) # locale year = next_date.year url = reverse('tours_by_date', kwargs={ 'cities_out': kwargs.get('cities_out', '-'), 'cities_in': kwargs.get('cities_in', '-'), 'on_date': '%s-%d' % (en_month, year), 'countries_in': kwargs.get('countries_in', '-'), }) # down.append((url, '%s %d' % (ru_month, year,))) # locale down.append((url, next_date)) # locale # locale.setlocale(locale.LC_ALL, '.'.join(current_locale)) # locale for add_year in range(2): url = reverse('tours_by_year', kwargs={ 'cities_out': kwargs.get('cities_out', '-'), 'cities_in': kwargs.get('cities_in', '-'), 'on_year': today.year + add_year, 'countries_in': kwargs.get('countries_in', '-'), }) down.append((url, today.year + add_year)) return down
def ru_strftime_month(date, format="%B", inflected_day=False, preposition=False): """ Cover for ru_strftime from pytils. Differences: inflected=False and another format by default """ try: uformat = pseudo_unicode(format, encoding, u"%d.%m.%Y") ures = dt.ru_strftime(uformat, date, inflected=False, inflected_day=inflected_day, preposition=preposition) res = pseudo_str(ures, encoding) except Exception, err: # because filter must die silently try: default_distance = "%s seconds" % str(int(time.time() - from_time)) except Exception: default_distance = "" res = default_value % {'error': err, 'value': default_distance}
def html_thread(ul): html = u"<ul>" for li in ul: html += u'''<li><div class='comment'> <div class='comment-title'><b>%(username)s</b>, %(date)s написал(а): <a href="javascript:;" comment_id='%(id)s' class="local-link add_comment">Комментировать</a> </div> %(text)s</div>''' % { 'username': li.username, 'date': dt.ru_strftime( u"%d %B %Y г. в %H:%M", li.date_created, inflected=True), 'text': li.text, 'id': li.id } if li.id in thread: html += html_thread(thread[li.id]) html += u"</li>" html += u"</ul>" return html
def __unicode__(self): return u'Заказ %s от %s' % (self.id, dt.ru_strftime(u"%d %B %Y", self.order_date))
def generate(self, cr, user, ids, context=None): disposition_id = ids if isinstance(ids, (list, tuple)): disposition_id = ids[0] disposition = self.read(cr, user, disposition_id, []) category = self.pool.get('cd.disposition.category').read(cr, user, disposition['category_id'][0], ['template_id']) if category['template_id']: template = self.pool.get('ir.attachment').read(cr, user, category['template_id'][0], ['store_fname', 'parent_id']) dbro = self.pool.get('document.directory').read(cr, user, template['parent_id'][0], ['storage_id'], context) storage = self.pool.get('document.storage').read(cr, user, dbro['storage_id'][0], ['path']) filepath = os.path.join(storage['path'], template['store_fname']) file_data = open(filepath, 'rb').read() template_io = StringIO() template_io.write(file_data) serializer = OOSerializer(template_io) basic = Template(source=template_io, serializer=serializer) o = { 'disposition_number': disposition['id'], 'disposition_date': dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['disposition_date'], '%Y-%m-%d'), inflected=True), 'from_date': '-', 'on_date': '-', 'from_date_second': '-', 'on_date_second': '-', 'not_later_date': '-', 'not_later_date_second': '-', 'to_date': '-', 'financier_id': '-', 'period_id': '-', 'seeing': disposition['seeing'] or '-', 'working_off_dates': disposition['working_off_dates'] or '-', 'employee_id': '-', 'job_id': '-', 'next_job_id': '-', 'teacher_job_id': '-', 'department_id': '-', 'next_department_id': '-', 'teacher_department_id': '-', 'trip': disposition['trip'] or '-', 'trip_place': disposition['trip_place'] or '-', 'grade_id': '-', 'reason': disposition['reason'] or '-', 'remark': disposition['remark'] or '-', 'direction_name': disposition['direction_name'] or '-', 'at_rate': int(disposition['at_rate']) or '-', 'date_ot': '-', 'next_attestation': '-', 'motive_rewarding': disposition['motive_rewarding'] or '-', 'promotion_type': disposition['promotion_type'] or '-', 'teacher_id': '-', 'financing_source': disposition['financing_source'] or '-', 'commission_ids': '-', 'term': disposition['term'] or '-', 'term_str': disposition['term_str'] or '-', 'amount': disposition['amount'] or '-', 'amount_str': to_grn(disposition['at_rate']), 'statement_date': '-', 'instate_date': '-', 'salary': disposition['salary'] or '-', 'salary_per': disposition['salary_per'] or '-', 'variable': disposition['variable'] or '-', 'variable_per': disposition['variable_per'] or '-', 'post_probation_grade_id': '-', 'probation_grade_id': '-', 'duration_probation': disposition['duration_probation'] or '-', 'year': disposition['year'] or '-', 'no_work': disposition['no_work'] or '-', 'work_day': disposition['work_day'] or '-', 'fio': disposition['fio'] or '-', 'schedule_date': '-', 'commission_date': '-', 'set_date': '-', 'list_date': '-', 'protocol_date': '-', 'top_date': '-', 'result_date': '-' } if disposition['from_date']: o['from_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['from_date'], '%Y-%m-%d'), inflected=True) if disposition['on_date']: o['on_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['on_date'], '%Y-%m-%d'), inflected=True) if disposition['from_date_second']: o['from_date_second'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['from_date_second'], '%Y-%m-%d'), inflected=True) if disposition['on_date_second']: o['on_date_second'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['on_date_second'], '%Y-%m-%d'), inflected=True) if disposition['not_later_date']: o['not_later_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['not_later_date'], '%Y-%m-%d'), inflected=True) if disposition['not_later_date_second']: o['not_later_date_second'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['not_later_date_second'], '%Y-%m-%d'), inflected=True) if disposition['to_date']: o['to_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['to_date'], '%Y-%m-%d'), inflected=True) if disposition['date_ot']: o['date_ot'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['date_ot'], '%Y-%m-%d'), inflected=True) if disposition['next_attestation']: o['next_attestation'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['next_attestation'], '%Y-%m-%d'), inflected=True) if disposition['statement_date']: o['statement_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['statement_date'], '%Y-%m-%d'), inflected=True) if disposition['instate_date']: o['instate_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['instate_date'], '%Y-%m-%d'), inflected=True) if disposition['schedule_date']: o['schedule_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['schedule_date'], '%Y-%m-%d'), inflected=True) if disposition['commission_date']: o['commission_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['commission_date'], '%Y-%m-%d'), inflected=True) if disposition['set_date']: o['set_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['set_date'], '%Y-%m-%d'), inflected=True) if disposition['list_date']: o['list_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['list_date'], '%Y-%m-%d'), inflected=True) if disposition['protocol_date']: o['protocol_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['protocol_date'], '%Y-%m-%d'), inflected=True) if disposition['top_date']: o['top_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['top_date'], '%Y-%m-%d'), inflected=True) if disposition['result_date']: o['result_date'] = dt.ru_strftime(u"%d %B %Y", datetime.strptime(disposition['result_date'], '%Y-%m-%d'), inflected=True) if disposition['financier_id']: o['financier_id'] = disposition['financier_id'][1] if disposition['employee_id']: o['employee_id'] = disposition['employee_id'][1] if disposition['job_id']: o['job_id'] = disposition['job_id'][1] if disposition['teacher_id']: o['teacher_id'] = disposition['teacher_id'][1] if disposition['next_job_id']: o['next_job_id'] = disposition['next_job_id'][1] if disposition['teacher_job_id']: o['teacher_job_id'] = disposition['teacher_job_id'][1] if disposition['department_id']: o['department_id'] = disposition['department_id'][1] if disposition['next_department_id']: o['next_department_id'] = disposition['next_department_id'][1] if disposition['teacher_department_id']: o['teacher_department_id'] = disposition['teacher_department_id'][1] if disposition['grade_id']: o['grade_id'] = disposition['grade_id'][1] if disposition['post_probation_grade_id']: o['post_probation_grade_id'] = disposition['post_probation_grade_id'][1] if disposition['probation_grade_id']: o['probation_grade_id'] = disposition['probation_grade_id'][1] if disposition['commission_ids']: o['commission_ids'] = ', '.join([x['name'] for x in self.pool.get('res.users').read(cr, 1, disposition['commission_ids'], ['name'])]) if disposition['period_id']: d = datetime.strptime('2013/10', '%Y/%m').strftime('%B %Y') o['period_id'] = tools.ustr(d) filename = 'Распоряжение № {0}'.format(disposition['id'],) odt_file = os.path.join(storage['path'], 'tmp.odt') file(odt_file, 'wb').write(basic.generate(o=o).render().getvalue()) doc_id = self.pool.get('ir.attachment').create(cr, user, { 'name': '{0}.odt'.format(filename, ), 'datas': base64.b64encode(open(odt_file, 'rb').read()), 'datas_fname': '{0}.odt'.format(filename, ), 'res_model': self._name, 'res_id': disposition['id'] }) #self.write(cr, user, [disposition['id']], {'doc_id': doc_id}) return doc_id return False
def __unicode__(self): return dt.ru_strftime(u'%d %B %Y (%a)', self.date, inflected=True) if self.date else u'--'
def index(request): ''' Очень обширная страница для выставления и просмотра оценок ''' def _get_month_key(dt): return int("%d%s" % (dt.year, str(dt.month).rjust(2, "0"))) render = {} if request.user.type == 'Parent': start = date.today() - timedelta(weeks = 2) end = date.today() + timedelta(days = 1) if request.method == 'GET': render['form'] = form = StatForm() else: render['form'] = form = StatForm(request.POST) if form.is_valid(): start = form.cleaned_data['start'] end = form.cleaned_data['end'] render.update(request.user.current_pupil.get_all_marks(start, end)) elif request.user.type == 'Teacher': import demjson if request.GET.get('set_current_grade', False): grade = get_object_or_404(Grade, id = request.GET.get('set_current_grade', 0)) if grade not in request.user.grades.all(): raise Http404(u'Нет такого класса') request.user.current_grade = grade request.user.save() if request.GET.get('set_current_subject', False): subject = get_object_or_404(Subject, id = request.GET.get('set_current_subject', 0)) if subject not in request.user.subjects.all(): raise Http404(u'Нет такого предмета') request.user.current_subject = subject request.user.save() if not request.user.current_grade: if request.user.get_grades_for_marks(): request.user.current_grade = request.user.get_grades_for_marks()[0] else: messages.error(request, u'К вам не прикреплено классов') return render_to_response( '~marks/%s/index.html' % request.user.type.lower(), render, context_instance = RequestContext(request)) render['lesson_form'] = LessonForm() try: request.user.current_grade.get_pupils_for_teacher_and_subject( request.user, request.user.current_subject ) except PlaningError: messages.error(request, u'В выбранном классе нет учеников') return render_to_response( '~marks/%s/index.html' % request.user.type.lower(), render, context_instance = RequestContext(request)) from pytils import dt date_start = date.today() - timedelta(days = 15) date_end = date.today() + timedelta(days = 1) render['stat_form'] = form = StatForm(request.GET) if form.is_valid(): date_start = form.cleaned_data['start'] date_end = form.cleaned_data['end'] else: render['stat_form'] = StatForm() lessons_range = [] render['monthes'] = monthes = {} month = date.today() - timedelta(days=365) while month<date.today() + timedelta(days=30): monthes[_get_month_key(month)] = ('', 0) month += timedelta(weeks=4) kwargs = { 'subject': request.user.current_subject, 'grade': request.user.current_grade } conn = Connection.objects.filter(teacher=request.user, **kwargs) if not conn: messages.error(request, u'Нет связок в выбранном сочетании предмет-класс') return render_to_response( '~marks/%s/index.html' % request.user.type.lower(), render, context_instance = RequestContext(request)) kwargs4lesson = {'teacher': request.user, # 'attendance__subject': request.user.current_subject, 'date__gte': date_start, # 'attendance__grade': request.user.current_grade, 'date__lte': date_end } args = [Q(attendance__group=c.connection) for c in conn] args.append(Q(attendance__group="0")) args.append(Q(attendance=None)) filter_arg = \ Q(attendance__subject=request.user.current_subject, attendance__grade=request.user.current_grade) \ | Q(resultdate__grades=request.user.current_grade, grade=request.user.current_grade, subject=request.user.current_subject) # filter_args.append(Q(attendance__subject=request.user.current_subject, attendance__grade=request.user.current_grade)) # filter_args.append(Q(resultdate__subject=request.user.current_subject, resultdate__grade=request.user.current_grade)) last_col = [] last_date = None for lesson in Lesson.objects.filter(reduce(lambda x, y: x | y, args), filter_arg, **kwargs4lesson).order_by('date'): new_range = lesson.attendance==None or not lesson.attendance.subject.groups or \ (len(last_col) == conn.count() and conn[0].connection != "0") or \ lesson.attendance.group == '0' or last_date != lesson.date if new_range: monthes[_get_month_key(lesson.date)] = (dt.ru_strftime(u'%B', lesson.date), monthes[_get_month_key(lesson.date)][1] + 1) if len(last_col): lessons_range.append(last_col) last_col = [] last_col.append(lesson) last_date = lesson.date if len(last_col): lessons_range.append(last_col) for i in monthes.keys(): if monthes[i][1] == 0: del monthes[i] render['lessons'] = lessons_range return render_to_response( '~marks/%s/index.html' % request.user.type.lower(), render, context_instance = RequestContext(request))
def _get_date(date): date_list = str(date).split('/') d = datetime.date(int(date_list[2]), int(date_list[1]), int(date_list[0])) result = dt.ru_strftime(u"%d %B %Y", d, inflected=True) return result
def get_current_date(): return str(dt.ru_strftime("%d %B %Y" + ' г.', inflected=True))
def setupTemplates(self): _D = lambda x: format_decimal(x, locale="ru_RU") _C = lambda x: format_decimal(x, format='#,##0.00', locale="ru_RU") self.templates.warn = u"""Внимание! Оплата данного счета означает согласие с условиями поставки товара. Уедомление об оплате обязательно. В противном случае не гарантируется наличие товара на складе. Товар отпускается по факту прихода денег на р/с Поставщика. самовывозом при наличии доверенности и паспорта""" def memberTemplate(m): res = u"<b>{m.name}" if m.INN: res += u", ИНН {m.INN}" if m.KPP: res += u", КПП {m.KPP}" res += u", {m.address}" if m.tel: res += u", тел.: {m.tel}</b>" return res.format(m=m) self.templates.memberTemplate = memberTemplate def itemTemplate(item): pStyle = self.param.minStyle return self.Line( item.position, Paragraph(item.name, pStyle), _D(item.quantity), item.units, _C(item.price), _C(item.amount) ) self.templates.itemTemplate = itemTemplate self.templates.amountTemplate = lambda amount, due: Paragraph( u"Всего наименований {amount}, на сумму {due} руб.".format( amount=_D(amount), due=_C(due)), self.param.normalStyle) def spellTotal(total): template = u"{rubles} {kopnum:02d} {kopstr}" from pytils import numeral n = {} n['rubles'] = numeral.rubles(int(total)).capitalize() n['kopnum'] = int(total * 100) - int(total)*100 n['kopstr'] = numeral.choose_plural( n['kopnum'], (u"копейка", u"копейки", u"копеек") ) return template.format(**n) self.templates.spellTotal = lambda due: Paragraph( u"<b>{}</b>".format(spellTotal(due)), self.param.normalStyle) self.templates.totalsTableTemplate = lambda total, vat, due: ( ("", u"Итого:", _C(total)), ("", u"В том числе НДС:", _C(vat) if vat else u"Без НДС"), ("", u"Всего к оплате:", _C(due)), ) from pytils.dt import ru_strftime self.templates.invoiceTitle = lambda invoiceNum: \ u"Счет на оплату №{} от {}".format(str(invoiceNum), ru_strftime(u"%d %B %Y", inflected=True, date=self.date))
def date_str(d): return dt.ru_strftime(u"%d %B %Y в %H:%M", d, inflected=True)
def ru_date(self, date): if date and date != 'False': return dt.ru_strftime(u'"%d" %B %Y года', date=datetime.strptime(date, "%Y-%m-%d"), inflected=True) return ''
def __unicode__(self): return u'feedback %s от %s' % (self.id, dt.ru_strftime(u"%d %B %Y", self.feedback_date))
def ru_strftime_plain(date, format="%d.%m.%Y"): print date return ru_strftime(format, date)
def index(request): ''' Очень обширная страница для выставления и просмотра оценок ''' def _get_month_key(dt): return int("%d%s" % (dt.year, str(dt.month).rjust(2, "0"))) render = {} if request.user.type == 'Parent': start = date.today() - timedelta(weeks=2) end = date.today() + timedelta(days=1) if request.method == 'GET': render['form'] = form = StatForm() else: render['form'] = form = StatForm(request.POST) if form.is_valid(): start = form.cleaned_data['start'] end = form.cleaned_data['end'] render.update(request.user.current_pupil.get_all_marks(start, end)) elif request.user.type == 'Teacher': import demjson if request.GET.get('set_current_grade', False): grade = get_object_or_404(Grade, id=request.GET.get( 'set_current_grade', 0)) if grade not in request.user.grades.all(): raise Http404(u'Нет такого класса') request.user.current_grade = grade request.user.save() if request.GET.get('set_current_subject', False): subject = get_object_or_404(Subject, id=request.GET.get( 'set_current_subject', 0)) if subject not in request.user.subjects.all(): raise Http404(u'Нет такого предмета') request.user.current_subject = subject request.user.save() if not request.user.current_grade: if request.user.get_grades_for_marks(): request.user.current_grade = request.user.get_grades_for_marks( )[0] else: messages.error(request, u'К вам не прикреплено классов') return render_to_response( '~marks/%s/index.html' % request.user.type.lower(), render, context_instance=RequestContext(request)) render['lesson_form'] = LessonForm() try: request.user.current_grade.get_pupils_for_teacher_and_subject( request.user, request.user.current_subject) except PlaningError: messages.error(request, u'В выбранном классе нет учеников') return render_to_response('~marks/%s/index.html' % request.user.type.lower(), render, context_instance=RequestContext(request)) from pytils import dt date_start = date.today() - timedelta(days=15) date_end = date.today() + timedelta(days=1) render['stat_form'] = form = StatForm(request.GET) if form.is_valid(): date_start = form.cleaned_data['start'] date_end = form.cleaned_data['end'] else: render['stat_form'] = StatForm() lessons_range = [] render['monthes'] = monthes = {} month = date.today() - timedelta(days=365) while month < date.today() + timedelta(days=30): monthes[_get_month_key(month)] = ('', 0) month += timedelta(weeks=4) kwargs = { 'subject': request.user.current_subject, 'grade': request.user.current_grade } conn = Connection.objects.filter(teacher=request.user, **kwargs) if not conn: messages.error(request, u'Нет связок в выбранном сочетании предмет-класс') return render_to_response('~marks/%s/index.html' % request.user.type.lower(), render, context_instance=RequestContext(request)) kwargs4lesson = { 'teacher': request.user, # 'attendance__subject': request.user.current_subject, 'date__gte': date_start, # 'attendance__grade': request.user.current_grade, 'date__lte': date_end } args = [Q(attendance__group=c.connection) for c in conn] args.append(Q(attendance__group="0")) args.append(Q(attendance=None)) filter_arg = \ Q(attendance__subject=request.user.current_subject, attendance__grade=request.user.current_grade) \ | Q(resultdate__grades=request.user.current_grade, grade=request.user.current_grade, subject=request.user.current_subject) # filter_args.append(Q(attendance__subject=request.user.current_subject, attendance__grade=request.user.current_grade)) # filter_args.append(Q(resultdate__subject=request.user.current_subject, resultdate__grade=request.user.current_grade)) last_col = [] last_date = None for lesson in Lesson.objects.filter(reduce(lambda x, y: x | y, args), filter_arg, **kwargs4lesson).order_by('date'): new_range = lesson.attendance==None or not lesson.attendance.subject.groups or \ (len(last_col) == conn.count() and conn[0].connection != "0") or \ lesson.attendance.group == '0' or last_date != lesson.date if new_range: monthes[_get_month_key(lesson.date)] = (dt.ru_strftime( u'%B', lesson.date), monthes[_get_month_key(lesson.date)][1] + 1) if len(last_col): lessons_range.append(last_col) last_col = [] last_col.append(lesson) last_date = lesson.date if len(last_col): lessons_range.append(last_col) for i in monthes.keys(): if monthes[i][1] == 0: del monthes[i] render['lessons'] = lessons_range return render_to_response('~marks/%s/index.html' % request.user.type.lower(), render, context_instance=RequestContext(request))
def __unicode__(self): return u'%s (%s)' % (self.title, dt.ru_strftime(date=self.pub_date))
import datetime from pytils import dt # действие ru_strftime аналогично оригинальному strftime # только в %a, %A, %b и %B вместо английских названий будут русские d = datetime.date(2006, 9, 15) # оригинал print d.strftime("%d.%m.%Y (%a)") # -> 15.09.2006 (Fri) # теперь на русском # (единственно, что нужно формат строки передавать в unicode # в то время, как в оригинальном strftime это обязательно str) print dt.ru_strftime(u"%d.%m.%Y (%a)", d) # -> 15.09.2006 (пт) # %A дает полное название дня недели print dt.ru_strftime(u"%d.%m.%Y (%A)", d) # -> 15.09.2006 (пятница) # %B -- название месяца print dt.ru_strftime(u"%d %B %Y", d) # -> 15 сентябрь 2006 # ru_strftime умеет правильно склонять месяц (опция inflected) print dt.ru_strftime(u"%d %B %Y", d, inflected=True) # -> 15 сентября 2006 # ... и день (опция inflected_day)
def __unicode__(self): return u'№ %s от %s' % (self.id, dt.ru_strftime(u"%d %B %Y", self.request_date))
def index(request): ''' Очень обширная страница, необходимо сделать разделение. ''' render = {} if request.user.type == 'Parent': start = date.today() - timedelta(weeks = 2) end = date.today() + timedelta(days = 1) if request.method == 'GET': render['form'] = form = StatForm() else: render['form'] = form = StatForm(request.POST) if form.is_valid(): start = form.cleaned_data['start'] end = form.cleaned_data['end'] render.update(request.user.current_pupil.get_all_marks(start, end)) elif request.user.type == 'Teacher': import demjson if request.GET.get('set_current_grade', False): grade = get_object_or_404(Grade, id = request.GET.get('set_current_grade')) if grade not in request.user.grades.all(): raise Http404(u'Нет такого класса') request.user.current_grade = grade request.user.save() render['lesson_form'] = LessonForm() if request.GET.get('set_lesson', False): lesson = get_object_or_404(Lesson, id = int(request.GET.get('lesson', 0)), teacher = request.user) form = LessonForm(request.GET, instance = lesson) if form.is_valid(): form.save() return HttpResponse('ok') if request.GET.get('get_lesson_info', False): lesson = get_object_or_404(Lesson, id = int(request.GET.get('lesson', 0)), teacher = request.user) return HttpResponse(demjson.encode({'task': lesson.task or '', 'topic': lesson.topic or ''})) if request.GET.get('set_mark', False): from templatetags.marks_chart import get_mark pupil = get_object_or_404(Pupil, id = int(request.GET.get('pupil', 0)), grade = request.user.current_grade) lesson = get_object_or_404(Lesson, id = int(request.GET.get('lesson', 0)), teacher = request.user) mark = unicode(request.GET.get('mark', 0)).lower() Mark.objects.filter(pupil = pupil, lesson = lesson).delete() m = Mark(pupil = pupil, lesson = lesson) tr_id = 'p-%d-%d' % (pupil.id, lesson.id) if mark not in ['1', '2', '3', '4', '5', 'n', u'н', '']: return HttpResponse(demjson.encode({'id': tr_id, 'mark': 'no'})) if mark == '': return HttpResponse(demjson.encode({'id': tr_id, 'mark': ''})) if mark in [u'n', u'н']: m.absent = True else: m.mark = int(mark) m.save() return HttpResponse(demjson.encode({'id': tr_id, 'mark': get_mark(pupil, lesson), 'mark_value': str(m).strip(), 'mark_type': m.get_type() }, encoding = 'utf-8')) from pytils import dt if not request.user.current_grade: if request.user.get_grades(): request.user.current_grade = request.user.get_grades()[0] request.user.save() else: messages.error(request, u'К вам не привязано классов') return HttpResponseRedirect('/') request.user.current_grade.get_pupils_for_teacher_and_subject( request.user, request.user.current_subject ) try: day, month, year = request.GET.get('date', '').split('.') date_start = date(day = day, month = month, year = year) except ValueError: date_start = date.today() lessons_range = [] render['monthes'] = monthes = {} for i in xrange(1, 13): monthes[i] = ('', 0) kwargs = { 'subject': request.user.current_subject, 'grade': request.user.current_grade } conn = Connection.objects.filter(teacher = request.user, **kwargs) if not conn: raise Http404('No connections') conn = conn[0] if conn.connection != '0': kwargs['group'] = conn.connection kwargs4lesson = {} for i in xrange(14, -1, -1): d = date_start - timedelta(days = i) kwargs['workday'] = str(d.weekday()+1) if UsalTimetable.objects.filter(**kwargs): kwargs4lesson = {'teacher': request.user, 'date': d, 'subject': request.user.current_subject} groups = {} for lesson in UsalTimetable.objects.filter(**kwargs): groups[lesson.group] = groups.get(lesson.group, 0) + 1 groups = groups.values() if Lesson.objects.filter(grade = request.user.current_grade, **kwargs4lesson).count() != max(groups): for j in xrange(max(groups) - Lesson.objects.filter(**kwargs4lesson).count()): t = Lesson(**kwargs4lesson) t.save() t.grade.add(request.user.current_grade) t.save() resultdates = ResultDate.objects.filter(date = d, grades = request.user.current_grade) if resultdates: resultdate = resultdates[0] kwargs4lesson = { 'resultdate': resultdate, 'grade': request.user.current_grade, 'subject': request.user.current_subject, 'teacher': request.user } if not Lesson.objects.filter(**kwargs4lesson): del kwargs4lesson['grade'] lesson = Lesson(topic = resultdate.name, date = resultdate.date, **kwargs4lesson) lesson.save() lesson.grade.add(request.user.current_grade) lesson.save() if len(kwargs4lesson) == 0: raise Http404(u'Нет расписания') del kwargs4lesson['date'] kwargs4lesson['date__gte'] = date_start - timedelta(days = 15) for lesson in Lesson.objects.filter(**kwargs4lesson).order_by('date'): monthes[lesson.date.month] = (dt.ru_strftime(u'%B', lesson.date), monthes[lesson.date.month][1] + 1) lessons_range.append(lesson) for i in monthes.keys(): if monthes[i][1] == 0: del monthes[i] render['lessons'] = lessons_range return render_to_response( '~marks/%s/index.html' % request.user.type.lower(), render, context_instance = RequestContext(request))
def get_date_human(self): if self.date: return dt.ru_strftime(u"%d %B %Y", self.date, inflected=True) return None
def ru_date(value): if value != '' and value is not None: return ru_strftime(format="%d %B %Y %H:%m", date=value, inflected=True) return ''
def __unicode__(self): return u'%s от %s' % (self.name, dt.ru_strftime(u"%d %B %Y", self.request_date))
def date_inflected(d, date_format): return dt.ru_strftime(unicode(date_format), d, inflected=True)
def __unicode__(self): return u"№ %s от %s" % (self.id, dt.ru_strftime(u"%d %B %Y", self.request_date))
def generate(self, cr, user, ids, context=None): contract_id = ids if isinstance(ids, (list, tuple)): contract_id = ids[0] contract = self.read(cr, user, contract_id, []) service = self.pool.get('brief.services.stage').read(cr, user, contract['service_id'][0], ['template_id']) if service['template_id']: template = self.pool.get('ir.attachment').read(cr, user, service['template_id'][0], ['store_fname', 'parent_id']) dbro = self.pool.get('document.directory').read(cr, user, template['parent_id'][0], ['storage_id'], context) storage = self.pool.get('document.storage').read(cr, user, dbro['storage_id'][0], ['path']) filepath = os.path.join(storage['path'], template['store_fname']) file_data = open(filepath, 'rb').read() template_io = StringIO() template_io.write(file_data) serializer = OOSerializer(template_io) basic = Template(source=template_io, serializer=serializer) d = datetime.strptime(contract['contract_date'], '%Y-%m-%d') date_str = dt.ru_strftime(u"%d %B %Y", d, inflected=True) if not contract['contract_number']: raise osv.except_osv('Договор', 'Необходимо ввести номер договора') if not contract['amount']: raise osv.except_osv('Договор', 'Необходимо ввести сумму договора') term = 7 if contract['term'] == 'mounth': term = 30 elif contract['term'] == 'year': term = 365 else: term = 0 o = { 'name': u'-', 'contract_number': contract['contract_number'], 'contract_date': date_str, 'doc_type': contract['doc_type_id'][1] if contract['doc_type_id'] else '-', 'responsible_id': contract['responsible_id'][1] if contract['responsible_id'] else '-', # Название баннерной или тизерной сети 'web': 'test', # стоимость услуг цифры 'cost_num': contract['amount'], # стоимость услуг слова 'cost_word': numeral.in_words(float(contract['amount'])), # срок предоставления услуги в фомате 30 (тридцать) 'term': term, # наш генеральный директор 'our_gen_dir': u'-', # название фирмы 'our_firm_name': u'-', # наш Юридический адрес 'our_address': u'-', # Фактический адрес,адрес почтовой корреспонденции наш 'our_fact_address': u'-', # ИНН / КПП наш 'our_inn': u'-', # ОГРН наш 'our_ogrn': u'-', # Код ОКПО наш 'our_okpo': u'-', # банк наш 'our_bank': u'-', # к/с наш 'our_ks': u'-', # р/с наш 'our_rs': u'-', # бик наш 'our_bik': u'-', # Тел/факс наш 'our_phone': u'-', # Web сайт почта наш 'our_site': u'-', # заказчика e-mail 'partner_mail': u'-', # название фирмы заказчика 'partner_firm_name': u'-', # Юридический адрес партнера 'partner_address': u'-', # Фактический адрес,адрес почтовой корреспонденции партнера 'partner_fact_address': u'-', # ИНН / КПП партнера 'partner_inn': u'-', # ОГРН партнера 'partner_ogrn': u'-', # Код ОКПО партнера 'partner_okpo': u'-', # банк партнера 'partner_bank': u'-', # к/с партнера 'partner_ks': u'-', # р/с партнера 'partner_rs': u'-', # бик партнера 'partner_bik': u'-', 'partner_kpp': u'-', # Тел/факс партнера 'partner_phone': u'-', # Web сайт почта партнера 'partner_site': u'-', } if contract['bank_id']: bank = self.pool.get('res.partner.bank').read(cr, 1, contract['bank_id'][0], []) o.update({ 'partner_mail': bank['email'] or u'-', 'partner_site': bank['site'] or u'-', 'partner_firm_name': bank['fullname'] or u'-', 'partner_address': self.pool.get('res.partner.bank.address').get_address(cr, contract['bank_id'][0]) or u'-', 'partner_fact_address': self.pool.get('res.partner.bank.address').get_address(cr, contract['bank_id'][0], 'fa') or u'-', 'partner_inn': bank['inn'] or u'-', 'partner_kpp': bank['kpp'] or u'-', 'partner_ogrn': bank['ogrn'] or u'-', 'partner_okpo': bank['okpo'] or u'-', 'partner_bank': bank['bank'] or u'-', 'partner_ks': bank['correspondent_account'] or u'-', 'partner_rs': bank['current_account'] or u'-', 'partner_bik': bank['bik'] or u'-', 'partner_phone': bank['phone'] or u'-', }) if contract['account_id']: account = self.pool.get('account.account').read(cr, 1, contract['account_id'][0], []) o.update({ 'our_gen_dir': account['responsible'] or u'-', 'our_firm_name': account['full'] or u'-', 'our_address': account['address'] or u'-', 'our_fact_address': account['address'] or u'-', 'our_inn': account['inn'] or u'-', 'our_kpp': account['kpp'] or u'-', 'our_ogrn': u'1127747081406', 'our_okpo': u'13183255', 'our_bank': account['bank'] or u'-', 'our_ks': account['bank_number'] or u'-', 'our_rs': account['account_number'] or u'-', 'our_bik': account['bik'] or u'-', 'our_phone': account['phone'] or u'-', 'our_site': u'UpSale.ru, [email protected]', }) filename = '{0} {1} {2}'.format( contract['contract_number'].encode('utf-8'), contract['partner_id'][1].encode('utf-8'), contract['service_id'][1].encode('utf-8'), ) #data = [(k, v.encode('cp1251')) for k, v in o.iteritems() if isinstance(v, unicode)] odt_file = os.path.join(storage['path'], 'tmp.odt') file(odt_file, 'wb').write(basic.generate(o=o).render().getvalue()) doc_id = self.pool.get('ir.attachment').create(cr, user, { 'name': '{0}.odt'.format(filename, ), 'datas': base64.b64encode(open(odt_file, 'rb').read()), 'datas_fname': '{0}.odt'.format(filename, ), 'res_model': self._name, 'res_id': contract['id'] }) self.write(cr, user, [contract['id']], {'doc_id': doc_id}) return True
def ru_date2(self, date): if date and date != 'False': return dt.ru_strftime(u'%d %B %Y г.', date=datetime.strptime(date, "%Y-%m-%d %H:%M:%S"), inflected=True) return ''