def create_time_table(period): print("Creating the time table...") print('Progress: 0%\r', end='\r') from_day = 15 to_day = 32 in_time = '0' out_time = '0' day_off = 0 months = period prog = 0 year = int(JalaliDateTime.now().strftime('%Y')) for month in months: if month == 0: year = year - 1 while from_day <= to_day: try: day = JalaliDate(year, month, from_day) day_type = day.strftime('%A') day_month = day.strftime("%m") day_date = day.strftime('%d') prog = prog + 1 from_day = from_day + 1 print(f"\rProgress: {round(100*(prog/31))}%", end='\r') if day_type != "Panjshanbeh" and day_type != "Jomeh": date = day.strftime('%Y-%m-%d') day_off = is_off(date) else: day_off = 1 db.execute( "INSERT INTO days VALUES ('{}', '{}', '{}', '{}', '{}', '{}')" .format(day_date, day_month, day_type, in_time, out_time, day_off)) except: from_day = 1 to_day = 15 break print(f"Time table created........") connection.commit()
def test_format(self): j = JalaliDate(date(1988, 5, 4)) self.assertEqual(j.isoformat(), "1367-02-14") self.assertEqual(j.strftime("%a %A %w"), "Cha Chaharshanbeh 4") j.locale = "fa" self.assertEqual(j.isoformat(), "۱۳۶۷-۰۲-۱۴") self.assertEqual(j.strftime("%a %A %w"), "چ چهارشنبه ۴") j = JalaliDate(1395, 3, 1) self.assertEqual(j.strftime("%d %b %B"), "01 Kho Khordad") self.assertEqual(j.strftime("%m %m %y %Y"), "03 03 95 1395") self.assertEqual(j.strftime("%p %j %j %U %W %%"), "AM 063 063 10 10 %") self.assertEqual(j.strftime("%c"), j.ctime()) self.assertEqual(j.strftime("%c"), "Shanbeh 01 Khordad 1395") self.assertEqual(j.strftime("%x"), "95/03/01") self.assertEqual(format(j, "%c"), j.ctime()) self.assertEqual(format(j), "1395-03-01") self.assertEqual(j.__repr__(), "JalaliDate(1395, 3, 1, Shanbeh)") j.locale = "fa" self.assertEqual(j.strftime("%d %b %B"), "۰۱ خرد خرداد") self.assertEqual(j.strftime("%m %m %y %Y"), "۰۳ ۰۳ ۹۵ ۱۳۹۵") self.assertEqual(j.strftime("%p %j %j %U %W %%"), "ق.ظ ۰۶۳ ۰۶۳ ۱۰ ۱۰ %") self.assertEqual(j.strftime("%c"), j.ctime()) self.assertEqual(j.strftime("%c"), "شنبه ۰۱ خرداد ۱۳۹۵") self.assertEqual(j.strftime("%x"), "۹۵/۰۳/۰۱") self.assertEqual(format(j, "%c"), j.ctime()) self.assertEqual(j.__repr__(), "JalaliDate(1395, 3, 1, Shanbeh)") self.assertEqual(format(j), "۱۳۹۵-۰۳-۰۱") with pytest.raises(TypeError): format(j, 1) j = JalaliDate(1397, 11, 29) self.assertEqual(j.strftime("%c"), "Doshanbeh 29 Bahman 1397") self.assertEqual(format(j), "1397-11-29") j.locale = "fa" self.assertEqual(j.strftime("%c"), "دوشنبه ۲۹ بهمن ۱۳۹۷") self.assertEqual(format(j), "۱۳۹۷-۱۱-۲۹") j = JalaliDate(1400, 4, 25) self.assertEqual(j.strftime("%c", "fa"), "جمعه ۲۵ تیر ۱۴۰۰") self.assertEqual(JalaliDate(1367, 2, 14), JalaliDate.fromisoformat("1367-02-14")) self.assertEqual(JalaliDate(1397, 12, 9), JalaliDate.fromisoformat("۱۳۹۷-۱۲-۰۹")) with pytest.raises(TypeError): JalaliDate.fromisoformat(13670214) with pytest.raises(ValueError, match="Invalid date separator: /"): JalaliDate.fromisoformat("1367/02/14") with pytest.raises(ValueError): JalaliDate.fromisoformat("1367-02/14")
def export(request): data = {} #operators can not know each other leads if request.user.is_superuser: leads = Lead.objects.order_by('-id') if "operator" in request.GET and len(request.GET["operator"])>0: data.update( { "operator":int(request.GET["operator"]) } ) operator = request.GET["operator"] if operator: leads = leads.filter(operator__id=operator) else: leads = Lead.objects.filter(operator__id=request.user.id).order_by('-id') #search if "phrase" in request.GET and len(request.GET["phrase"])>0: data.update( { "phrase":request.GET["phrase"] } ) phrase = request.GET["phrase"] if phrase: p_name = leads.filter(name_and_family__icontains=phrase) p_phone = leads.filter(phone_number__icontains=phrase) p_comment = leads.filter(comments__text__icontains=phrase) p_question = leads.filter(question__icontains=phrase) leads = p_name | p_phone | p_comment | p_question leads = leads.distinct() if "origin" in request.GET and len(request.GET["origin"])>0: data.update( { "origin":int(request.GET["origin"]) } ) origin = request.GET["origin"] if origin: leads = leads.filter(origin__id=origin) if "gender" in request.GET and len(request.GET["gender"])>0: data.update( { "gender":request.GET["gender"] } ) gender = request.GET["gender"] if gender: leads = leads.filter(gender=gender) if "status" in request.GET and len(request.GET["status"])>0: data.update( { "status":request.GET["status"] } ) status = request.GET["status"] if status: leads = leads.filter(register_status=status) if "label1" in request.GET and len(request.GET["label1"])>0: data.update( { "label1":request.GET["label1"] } ) label1 = request.GET["label1"] if label1: leads = leads.filter(label__label__color_code=label1) if "label2" in request.GET and len(request.GET["label2"])>0: data.update( { "label2":request.GET["label2"] } ) label2 = request.GET["label2"] if label2: leads = leads.filter(label__label__color_code=label2) if "date_from" in request.GET and len(request.GET["date_from"])>0: date_from = request.GET["date_from"] if date_from: date_from_s =date_from.split("/") date_from = JalaliDate(int(date_from_s[0]), int(date_from_s[1]), int(date_from_s[2])).to_gregorian() data.update( { "date_from":date_from.strftime("%Y-%m-%d")} ) leads = leads.filter(led_time__gte=date_from) if "date_to" in request.GET and len(request.GET["date_to"])>0: date_to = request.GET["date_to"] if date_to: date_to_s =date_to.split("/") date_to = JalaliDate(int(date_to_s[0]), int(date_to_s[1]), int(date_to_s[2])).to_gregorian() data.update( { "date_to":date_to.strftime("%Y-%m-%d")} ) date_to += timedelta(days=1) leads = leads.filter(led_time__lte=date_to) # if there is no date show last month if "date_from" not in data: date = datetime.now() date -= timedelta(days=30) leads = leads.filter(led_time__gte=date) date = date.strftime("%Y-%m-%d") data.update( { "date_from":date} ) if "date_to" not in data: date = datetime.now() date += timedelta(days=1) leads = leads.filter(led_time__lte=date) date = date.strftime("%Y-%m-%d") date = data.update( { "date_to":date} ) #leads paginator paginator = Paginator(leads, 30) page = request.GET.get('page') if page: paged_leads = paginator.page(page) else: paged_leads = paginator.page(1) #page = paginator.get_page(page) comments = Comment.objects.all() labels = Label.objects.all() labels_def = LabelDefinition.objects.all() origins = Origin.objects.all() time = JalaliDateTime.now().strftime("%H:%M %Y-%m-%d") data.update( {'comments': comments, 'leads':paged_leads, 'labels': labels, 'time': time, 'labels_def': labels_def, \ origins:'origins','REGISTRATION_STATUS':REGISTRATION_STATUS, 'GENDER_CHOICES':GENDER_CHOICES,\ 'ORIGIN_DESCRIPTION':ORIGIN_DESCRIPTION, 'USER_NAME_AND_FAMILY':USER_NAME_AND_FAMILY,\ 'LABELDEFINITION_TAG':LABELDEFINITION_TAG,} ) return render(request,'leads/export/export.html', data)
def test_format(self): j = JalaliDate(date(1988, 5, 4)) self.assertEqual(j.isoformat(), "1367-02-14") self.assertEqual(j.strftime("%a %A %w"), "Cha Chaharshanbeh 4") j.locale = "fa" self.assertEqual(j.isoformat(), "۱۳۶۷-۰۲-۱۴") self.assertEqual(j.strftime("%a %A %w"), "چ چهارشنبه ۴") j = JalaliDate(1395, 3, 1) self.assertEqual(j.strftime("%d %b %B"), "01 Kho Khordad") self.assertEqual(j.strftime("%m %m %y %Y"), "03 03 95 1395") self.assertEqual(j.strftime("%p %j %j %U %W %%"), "AM 063 063 10 10 %") self.assertEqual(j.strftime("%c"), j.ctime()) self.assertEqual(j.strftime("%c"), "Shanbeh 01 Khordad 1395") self.assertEqual(j.strftime("%x"), "95/03/01") self.assertEqual(format(j, "%c"), j.ctime()) self.assertEqual(format(j), "1395-03-01") self.assertEqual(j.__repr__(), "JalaliDate(1395, 3, 1, Shanbeh)") j.locale = "fa" self.assertEqual(j.strftime("%d %b %B"), "۰۱ خرد خرداد") self.assertEqual(j.strftime("%m %m %y %Y"), "۰۳ ۰۳ ۹۵ ۱۳۹۵") self.assertEqual(j.strftime("%p %j %j %U %W %%"), "ق.ظ ۰۶۳ ۰۶۳ ۱۰ ۱۰ %") self.assertEqual(j.strftime("%c"), j.ctime()) self.assertEqual(j.strftime("%c"), "شنبه ۰۱ خرداد ۱۳۹۵") self.assertEqual(j.strftime("%x"), "۹۵/۰۳/۰۱") self.assertEqual(format(j, "%c"), j.ctime()) self.assertEqual(j.__repr__(), "JalaliDate(1395, 3, 1, Shanbeh)") self.assertEqual(format(j), "۱۳۹۵-۰۳-۰۱") j = JalaliDate(1397, 11, 29) self.assertEqual(j.strftime("%c"), "Doshanbeh 29 Bahman 1397") self.assertEqual(format(j), "1397-11-29") j.locale = "fa" self.assertEqual(j.strftime("%c"), "دوشنبه ۲۹ بهمن ۱۳۹۷") self.assertEqual(format(j), "۱۳۹۷-۱۱-۲۹")
def find_dates(sentence_lem): fa_dates = [] indexes = [] sentence = find_dates_replace(sentence_lem) for regX in [ "امروز", "دیروز", "فردا", "پارسال", "امسال", r"([\u0660-\u0669]|[\d])+[\s]روز[\s]پیش", r"([\u0660-\u0669]|[\d])+[\s]هفته[\s]پیش", r"([\u0660-\u0669]|[\d])+[\s]سال[\s]پیش", r"([\u0660-\u0669]|[\d])+[\s]روز[\s]بعد", r"([\u0660-\u0669]|[\d])+[\s]هفته[\s]بعد", r"([\u0660-\u0669]|[\d])+[\s]سال[\s]بعد" ]: en_datetimes = [x.group() for x in re.finditer(regX, sentence)] # if re.search(regX, sentence) is not None: # en_datetime = dateparser.parse(re.search(regX, sentence).group(0), # settings={'TIMEZONE': '+0330'}) for strDate in en_datetimes: indexes.append(sentence_lem.find(strDate)) en_datetime = dateparser.parse(strDate, settings={'TIMEZONE': '+0330'}) fa_datetime = JalaliDate(en_datetime) fa_dates.append(fa_datetime.strftime('%Y-%m-%d')) # find dates like "18 اسفند" dates = [ x.group() for x in re.finditer(r"\d+[\s][\u0600-\u06FF]+", sentence) ] for i in range(len(dates)): for per_month in [ 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'ابان', 'اذر', 'دی', 'بهمن', 'اسفند' ]: if per_month in dates[i]: indexes.append(sentence_lem.find(dates[i])) en_datetime = JalaliCalendar(dates[i]).get_date() fa_datetime = JalaliDate(en_datetime.date_obj) temp = fa_datetime.strftime('%Y-%m-%d') if len(fa_dates) <= i: year = '1399' # TODO - FIX FOR NEXT YEAR :D else: year = fa_dates[i].split("-")[0] month = temp.split("-")[1] day = temp.split("-")[2] if len(fa_dates) <= i: fa_dates.append(f"{year}-{month}-{day}") else: fa_dates[i] = f"{year}-{month}-{day}" if len(fa_dates) == 0: indexes = [0] en_datetime = dateparser.parse('امروز', settings={'TIMEZONE': '+0330'}) fa_datetime = JalaliDate(en_datetime) fa_dates.append(fa_datetime.strftime('%Y-%m-%d')) # find dates like "سال 99", "سال 1399" dates = [ x.group() for x in re.finditer(r"((سال)|(کدام روز))[\s]\d+", sentence) ] for i in range(len(dates)): splited = dates[i].split(" ") year = splited[len(splited) - 1] if len(year) == 2: year = '13' + year year = unidecode(year) month = fa_dates[i].split("-")[1] day = fa_dates[i].split("-")[2] fa_dates[i] = f"{year}-{month}-{day}" fa_dates = [x for _, x in sorted(zip(indexes, fa_dates))] return fa_dates