Skip to content

Commit b5e4fae

Browse files
author
Junior Polegato
committed
Cálculos com datas no PoleUtil
1 parent 4793a26 commit b5e4fae

File tree

1 file changed

+56
-4
lines changed

1 file changed

+56
-4
lines changed

fontes/pole/PoleUtil.py

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
import PoleLog
4141
import string
4242

43+
from dateutil.relativedelta import relativedelta
44+
from dateutil.rrule import MONTHLY, rrule, WEEKLY
45+
4346

4447
def load_pole_translations(DIR):
4548
gettext.bindtextdomain(APP, DIR)
@@ -1977,8 +1980,12 @@ def make_pwd_hash(pwd):
19771980
return phash.hexdigest()
19781981

19791982

1980-
def sql_like(texto):
1981-
return '%{}%'.format('%'.join(texto.split()))
1983+
def sql_like(value):
1984+
return '%{}%'.format('%'.join(value.split()))
1985+
1986+
1987+
def sql_in(values):
1988+
return ', '.join([':id%d' % x for x in xrange(len(values))])
19821989

19831990

19841991
def truncate(value):
@@ -1996,6 +2003,51 @@ def get_name_of_month(today, date):
19962003
return name
19972004

19982005

1999-
def get_danfe_path(rootdir, access_key, today, emit_date):
2006+
def get_danfe_path(rootdir, key, today, emit_date):
20002007
subfolder = get_name_of_month(today, emit_date)
2001-
return os.path.join(rootdir, subfolder, 'PDF', access_key + '.pdf')
2008+
return os.path.join(rootdir, subfolder, 'PDF', key + '.pdf')
2009+
2010+
2011+
def first_day(date):
2012+
return convert_and_format(date, datetime.date, MONTH)[0]
2013+
2014+
WEEKINDEX = {'SEG': 0, 'TER': 1, 'QUA': 2, 'QUI': 3, 'SEX': 4, 'SAB': 5, 'DOM': 6}
2015+
2016+
2017+
def due_date(dtstart, days):
2018+
return [dtstart + relativedelta(days=day) for day in days]
2019+
2020+
2021+
def due_date_to_nearest_monthday(dtstart, days, monthday):
2022+
return [min(rrule(MONTHLY,
2023+
bymonthday=monthday,
2024+
dtstart=day - relativedelta(days=30),
2025+
until=day + relativedelta(days=30)),
2026+
key=lambda x: abs(x - day))
2027+
for day in due_date(dtstart, days)]
2028+
2029+
2030+
def due_date_to_nearest_weekday(dtstart, days, weekdays):
2031+
return [min(rrule(WEEKLY,
2032+
byweekday=[WEEKINDEX.get(d, 0) for d in weekdays],
2033+
dtstart=day - relativedelta(weeks=1),
2034+
until=day + relativedelta(weeks=1)),
2035+
key=lambda x: abs(x - day))
2036+
for day in due_date(dtstart, days)]
2037+
2038+
2039+
def due_date_to_next_weekday(dtstart, days, weekdays):
2040+
return [rrule(WEEKLY,
2041+
byweekday=[WEEKINDEX.get(d, 0) for d in weekdays],
2042+
count=1,
2043+
dtstart=day)[0]
2044+
for day in due_date(dtstart, days)]
2045+
2046+
2047+
def slug(text):
2048+
text = normalize(text).lower()
2049+
return re.sub(r'\W+', '-', text)
2050+
2051+
2052+
def normalize(text):
2053+
return unicodedata.normalize('NFKD', text.decode('utf-8')).encode('ascii', 'ignore')

0 commit comments

Comments
 (0)