Пример #1
0
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()
Пример #2
0
    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")
Пример #3
0
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)
Пример #4
0
    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), "۱۳۹۷-۱۱-۲۹")
Пример #5
0
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