def test_format(self): self.assertEqual( JalaliDateTime(1369, 7, 1, 14, 0, 10, 0, pytz.utc).strftime("%X %p %z %Z"), "14:00:10 PM +0000 UTC", ) self.assertEqual( JalaliDateTime(1369, 7, 1, 14, 0, 10, 0, pytz.utc).strftime("%c"), "Yekshanbeh 01 Mehr 1369 14:00:10", ) self.assertEqual( JalaliDateTime(1397, 11, 30, 14, 0, 10, 0, pytz.utc).strftime("%c"), "Seshanbeh 30 Bahman 1397 14:00:10", ) self.assertEqual( JalaliDateTime(1369, 7, 1, 11, 0, 10, 553, pytz.utc).strftime("%I:%M:%S.%f %p"), "11:00:10.000553 AM", ) self.assertEqual( JalaliDateTime(1369, 7, 1, 14, 0, 10, 553, pytz.utc).strftime("%I:%M:%S.%f %p"), "02:00:10.000553 PM", )
def test_hash(self): j1 = JalaliDateTime.today().replace(tzinfo=pytz.utc) j2 = JalaliDateTime(1369, 7, 1, 0, 0, 0, 0) j3 = JalaliDateTime(datetime(1990, 9, 23, 0, 0, 0, 0)) self.assertEqual( { j1: "today", j2: "test1", j3: "test2" }, { JalaliDateTime( j1.year, j1.month, j1.day, j1.hour, j1.minute, j1.second, j1.microsecond, j1.tzinfo, ): "today", JalaliDateTime(1369, 7, 1, 0, 0, 0, 0): "test2", }, )
def test_shamsi_to_gregorian(self): self.assertEqual( JalaliDateTime(1367, 2, 14, 14, 0, 0, 0).to_gregorian(), datetime(1988, 5, 4, 14, 0, 0, 0), ) self.assertEqual( JalaliDateTime(1399, 11, 23, 13, 12, 0, 0).to_gregorian(), datetime(2021, 2, 11, 13, 12, 0, 0), )
def test_timetuple(self): self.assertEqual( JalaliDateTime(1398, 3, 17, 18, 36, 30, 811090).timetuple(), time.struct_time((2019, 6, 7, 18, 36, 30, 4, 158, -1)), ) self.assertEqual( JalaliDateTime(1367, 2, 14, 14, 0, 0, 0).utctimetuple(), time.struct_time((1988, 5, 4, 14, 0, 0, 2, 125, 0)), )
def test_gregorian_to_shamsi(self): self.assertEqual( JalaliDateTime(datetime(1990, 9, 23, 14, 14, 1, 1111)), JalaliDateTime(1369, 7, 1, 14, 14, 1, 1111), ) self.assertEqual( JalaliDateTime.to_jalali(datetime(1988, 5, 4, 14, 0, 0, 0)), JalaliDateTime(1367, 2, 14, 14, 0, 0, 0), )
def lead_add(request): if request.method == "POST" and request.user.is_authenticated \ and request.user.is_staff: name_and_family = request.POST['name_and_family'] gender = request.POST['gender'] phone_fa = digits.ar_to_fa(request.POST['phone_number']) phone_en = digits.fa_to_en(phone_fa) register_status = request.POST['register_status'] operator = request.user origin = Origin.objects.filter(id=int(request.POST['origin'])).first() #fields should be validate if len(name_and_family) > 2 and len(phone_en) > 5 and len(phone_en) < 16 and\ phone_en.isdigit() and len(Lead.objects.filter(phone_number=phone_en)) == 0: lead = Lead(origin = origin, name_and_family = name_and_family.encode("utf-8"), gender = gender,\ phone_number = phone_en, register_status = register_status,\ led_time = datetime.now(),led_time_jalali = JalaliDateTime.now().strftime("%Y-%m-%d %H:%M:%S"),\ led_time_jalali_str = JalaliDateTime.now().strftime("%c")) #if lead is registered save operator if register_status == "K": lead.registered_by = request.user else: lead.registered_by = None lead.save() lead.operator.add(operator) messages.success(request, "You'r new lead has been save") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) #if same phone number added by 1 or more operators elif len(Lead.objects.filter(phone_number=phone_en)) == 1: lead = Lead.objects.filter(phone_number=phone_en).first() if request.user in lead.operator.all(): messages.warning(request, "Phone number is repetitive") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) else: if lead.register_status != "K": lead.operator.add(request.user) lead.save() messages.info(request, "lead is repetitive but you added to this lead operators") messages.success(request, "You'r new lead has been save") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) else: messages.info(request, "lead is repetitive and registered by another operator") messages.warning(request, "You'r new lead did not changed!") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) elif len(name_and_family) <= 3: messages.warning(request, "Check name and family fileld") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) elif len(phone_en) <= 6 and len(phone_en) >= 16 and phone_en.isdigit() is False: messages.warning(request, "Phone number is in wrong format") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) else: messages.warning(request, "something went wrong") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) else: messages.error(request, "You'r not authorized") return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def generate_excel_file(user: User, j_year: int, j_month: int) -> BytesIO: date_from = JalaliDateTime(year=j_year, month=j_month, day=1).to_gregorian() next_j_month = j_month % 12 + 1 date_to = JalaliDateTime(year=j_year, month=next_j_month, day=1).to_gregorian() rollouts = Rollout.objects \ .filter(user=user) \ .filter(time__gte=date_from, time__lt=date_to) \ .order_by('time') excel_file = ExcelConverter(user, rollouts, starting_date=date_from).get_excel_file() return excel_file
def add_event(client, message): _, name, date, hour = message.text.split() year, month, day = list(map(int, date.split('/'))) hour, minute = list(map(int, hour.split(':'))) date = JalaliDateTime(year, month, day).to_gregorian() # date = date.replace(hour=hour, minute=minute, tzinfo=tehran) date = date.replace(hour=hour, minute=minute, tzinfo=tz('UTC')) events.append({date: [name, message.chat.id]}) message.reply("Time", reply_markup=ReplyKeyboardMarkup( [["1 Week Before", "1 Day Before", "1 Hour Before"]], resize_keyboard=True))
def test_base(self): self.assertEqual(JalaliDateTime(1367, 2, 14, 14, 0, 0, 0), JalaliDateTime.to_jalali(datetime(1988, 5, 4, 14, 0, 0, 0))) self.assertEqual(JalaliDateTime(1369, 7, 1, 14, 14, 1, 1111), JalaliDateTime(datetime(1990, 9, 23, 14, 14, 1, 1111))) self.assertEqual(JalaliDateTime(1369, 7, 1, 14, 14, 1, 9111), JalaliDateTime(JalaliDateTime(1369, 7, 1, 14, 14, 1, 9111))) g = JalaliDateTime.now() self.assertEqual(g.time(), _time(g.hour, g.minute, g.second, g.microsecond)) g = g.replace(tzinfo=pytz.timezone("America/Los_Angeles")) self.assertEqual(g.timetz(), _time(g.hour, g.minute, g.second, g.microsecond, pytz.timezone("America/Los_Angeles"))) self.assertEqual(JalaliDateTime.fromtimestamp(578723400, pytz.utc), JalaliDateTime(1367, 2, 14, 4, 30, 0, 0, pytz.utc)) self.assertEqual(JalaliDateTime.utcfromtimestamp(578723400), JalaliDateTime(1367, 2, 14, 4, 30, 0, 0)) try: JalaliDateTime._check_time_fields(20, 1, 61, 1000) except ValueError: assert True else: assert False try: JalaliDateTime._check_time_fields("20", 1, 61, 1000) except TypeError: assert True else: assert False
def to_jalali(value, arg='%A - %d %B %Y - %H:%M'): month_map = { "Farvardin": "فروردین", "Ordibehesht": "اردیبهشت", "Khordad": "خرداد", "Tir": "تیر", "Mordad": "مرداد", "Shahrivar": "شهریور", "Mehr": "مهر", "Aban": "آبان", "Azar": "آذر", "Dey": "دی", "Bahman": "بهمن", "Esfand": "اسفند", } week_map = { "Shanbeh": "شنبه", "Yekshanbeh": "یکشنبه", "Doshanbeh": "دوشنبه", "Seshanbeh": "سهشنبه", "Chaharshanbeh": "چهارشنبه", "Panjshanbeh": "پنجشنبه", "Jomeh": "جمعه" } return utils.replace( utils.replace(JalaliDateTime(value).strftime(arg), week_map), month_map)
def parse(self, value): shamsi_date_time = value year_ = int(shamsi_date_time[0:4]) month_ = int(shamsi_date_time[5:7]) day_ = int(shamsi_date_time[8:10]) padding = shamsi_date_time.find(':') if not padding == -1: padding -= 2 hour_ = int(shamsi_date_time[padding:padding + 2]) padding += 3 min_ = int(shamsi_date_time[padding:padding + 2]) padding += 3 sec_ = int(shamsi_date_time[padding:padding + 2]) else: hour_ = 0 padding += 3 min_ = 0 padding += 3 sec_ = 0 self.date = JalaliDateTime(year=year_, month=month_, day=day_, hour=hour_, minute=min_, second=sec_).to_gregorian() self.persian_date = self.from_gregorian(self.date) return self
def record_form(): if request.method == "POST": database = current_app.config['DATABASE_NAME'] client = MongoClient('localhost', 27017) db = client[database] items = session['basket'] basket = { "customer_first_name": request.form['name'], "customer_last_name": request.form['family_name'], "time_give": JalaliDateTime.fromisoformat(request.form['date-give']).to_gregorian(), "time_record": datetime.now(), "phone": int(request.form['phone']), "total_costs": int(request.form['totalCoast']), "address": request.form['address'], "items": [] } products = {i: request.form[i].split(',') for i in request.form if i.startswith('product')} basket["items"] = [ dict({"name_product": products[i][0], "quantity": int(products[i][1]), "price": int(products[i][2]), "name_inventory": products[i][3]}) for i in products] db.basket.insert_one(basket) session['basket'] = [] return request.form
def fetch_startup_service(owner, context): """get the startup that assign to the requested user and get the custom leader that added by user Arguments: owner {OBEJCET} -- requested user context {DICT} -- a dictionary of context to add it some more context Returns: OBJECT -- returns the determined startup """ db_startup = get_startup_service(owner=owner) the_time = JalaliDateTime.now().to_gregorian() try: user_mentor = get_startup_service(owner=owner, rahbar__mentor_user=True) except: user_mentor = None context.update({ 'the_time': the_time, 'user_mentor': user_mentor, 'db_startup': db_startup, }) return db_startup
def from_gregorian(self,greg_date_time,add_time_zone=True): if not add_time_zone: return JalaliDateTime.to_jalali(greg_date_time).strftime("%Y/%m/%d %H:%M:%S") if SERVER_ON_PARS or SERVER_ON_HEROKU: if self.is_in_first_half_shamsi_year(): hours=4 else: hours=3 minutes=30 else: if self.is_in_first_half_shamsi_year(): hours=4 else: hours=3 minutes=30 return JalaliDateTime.to_jalali(greg_date_time+datetime.timedelta(hours=hours,minutes=minutes)).strftime("%Y/%m/%d %H:%M:%S")
def check_time(): today = JalaliDateTime.now().strftime('%m-%d') today = time.strptime(today, '%m-%d') a = '0' b = '0' c = 0 missings = db.execute('SELECT day, month FROM days WHERE in_time = ? AND off = ?', (a, c)).fetchall() print ("you have missing time entris in these days:") for missing in missings: m_d = str(missing[0]).zfill(2) m_m = str(missing[1]).zfill(2) day = f'{m_m}-{m_d}' day = time.strptime(day, '%m-%d') if today < day: break else: print (f'{m_m}-{m_d} Has no ENTER time') missings = db.execute('SELECT day, month FROM days WHERE out_time = ? AND off = ?', (b, c)).fetchall() print ("-------------------------------") for missing in missings: m_d = str(missing[0]).zfill(2) m_m = str(missing[1]).zfill(2) day = f'{m_m}-{m_d}' day = time.strptime(day, '%m-%d') if today < day: break else: print (f'{m_m}-{m_d} Has no EXIT time')
def test_hash(self): j1 = JalaliDateTime.today().replace(tzinfo=pytz.utc) j2 = JalaliDateTime(1369, 7, 1, 0, 0, 0, 0) j3 = JalaliDateTime(datetime(1990, 9, 23, 0, 0, 0, 0)) self.assertEqual({j1: "today", j2: "mini1", j3: "mini2"}, {JalaliDateTime(j1.year, j1.month, j1.day, j1.hour, j1.minute, j1.second, j1.microsecond, j1.tzinfo): "today", JalaliDateTime(1369, 7, 1, 0, 0, 0, 0): "mini2"})
def export_all(request): leads = Lead.objects.order_by('-id') comments = Comment.objects.all() labels = Label.objects.all() time = JalaliDateTime.now().strftime("%H:%M %Y-%m-%d") data = {'comments': comments, 'leads':leads, 'labels': labels, 'time': time} return render(request,'leads/export/export_all.html', data)
async def job(): async with aiohttp.ClientSession() as session: start_time = time() async with session.get(url) as response: status = response.status response_body = await response.text() print('%s: Pinged %s / %.2fms / %d: %s' % (JalaliDateTime.now(timezone('Iran')).strftime('%Y-%m-%d %H:%M:%S%Z'), REMOTE_HOST, time() - start_time, status, response_body))
def startups_api(request): """an api to show startups that have credit in 100startups main page Arguments: request {REQUEST} -- for HTTP Response Returns: JSONRESPONSE -- returns serialized informaion about startup """ protocol = urlsplit(request.build_absolute_uri(None)).scheme current_site = get_current_site(request) result = [] startup = StartUp.objects.filter(credit__isnull=False) site = ''.join([str(protocol), '://', str(current_site)]) for db in startup: date = JalaliDateTime.to_jalali( datetime.datetime(db.created_date.year, db.created_date.month, db.created_date.day, db.created_date.hour, db.created_date.minute, db.created_date.second, 0)) result.append({ 'id': db.id, 'logo': site + str(db.image.url), 'name': db.title, 'site': db.site, 'credit': db.credit, 'explaine': db.explain_startup, 'created_date': str(date), 'leader': { 'first_name': db.rahbar_asli.first_name, 'last_name': db.rahbar_asli.last_name, 'avatar': site + str(db.rahbar_asli.avatar.url) }, 'investor': list( db.investor.annotate(avatar=F('user__avatar'), first_name=F('user__first_name'), last_name=F('user__last_name')).values( 'avatar', 'first_name', 'last_name')), 'team': list( db.teammember.annotate(first_name=F('t_first_name'), last_name=F('t_last_name'), avatar=F('t_avatar'), role=F('t_role_in_startup')).values( 'first_name', 'last_name', 'avatar', 'role')) }) return JsonResponse(result, safe=False)
def comment_add(request): if request.method == "POST" and request.user.is_authenticated \ and request.user.is_staff and len(request.POST['text']) > 0: get_object_or_404(Lead, id=int(request.POST["id"])) post = Lead.objects.filter(id=int(request.POST["id"])).first() author = request.user text = request.POST['text'] comment = Comment(post = post, author = author, text = text, created_date = datetime.now(), \ created_date_jalali = JalaliDateTime.now().strftime("%Y-%m-%d %H:%M:%S"), \ created_date_jalali_str = JalaliDateTime.now().strftime("%c")) comment.save() messages.success(request, "You'r comment has been save") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) elif len(request.POST['text']) == 0: messages.warning(request, "You'r comment text field is empty") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) else: messages.error(request, "You'r not authorized") return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def jdatetime(value, arg=""): try: if str(value) == "now": if arg == "": arg = "%Y-%m-%d %H:%M:%S" resultdate = JalaliDateTime.now() elif str(value) == "time": if arg == "": arg = "%H:%M:%S" resultdate = JalaliDateTime.now() elif str(value) == "date": if arg == "": arg = "%Y-%m-%d" resultdate = JalaliDateTime.now() else: if isinstance(value, datetime.date): resultdate = JalaliDateTime.to_jalali(value) else: year, month, day = map(int, value[:10].split('-')) hour = minute = second = millisecond = 0 if value.find(' ') == 10: date, time = value.split(' ') time = time.split(':') if len(time) == 1: hour = int(time[0]) elif len(time) == 2: hour = int(time[0]) minute = int(time[1]) elif len(time) == 3: hour = int(time[0]) minute = int(time[1]) time = time[2].split('.') second = int(time[0]) if len(time) > 1: millisecond = int(time[1]) resultdate = JalaliDateTime.to_jalali( datetime.datetime(year, month, day, hour, minute, second, millisecond)) if arg: return resultdate.strftime(arg) else: return resultdate except Exception as err: return "jdatetime error:%s" % err
def label_add(request): if request.method == "POST" and request.user.is_authenticated \ and request.user.is_staff: get_object_or_404(Lead, id=int(request.POST["lead_id"])) get_object_or_404(LabelDefinition, id=int(request.POST["label"])) #if label is uniqe for this lead if len(Label.objects.filter(label__id=int(request.POST["label"]), post__id=int(request.POST["lead_id"]))) == 0: post = Lead.objects.filter(id=int(request.POST["lead_id"])).first() label1 = LabelDefinition.objects.filter(id=int(request.POST["label"])).first() label = Label(post = post, label = label1, owner = request.user , created_date = datetime.now(), \ created_date_jalali = JalaliDateTime.now().strftime("%Y-%m-%d %H:%M:%S"), \ created_date_jalali_str = JalaliDateTime.now().strftime("%c")) label.save() messages.success(request, "You'r label has been changed") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) else: messages.warning(request, "This label exist") return HttpResponseRedirect(request.META.get('HTTP_REFERER')) else: messages.error(request, "You'r not authorized") return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
def test_others(self): self.assertTrue(JalaliDateTime.fromtimestamp(time.time()) <= JalaliDateTime.now()) self.assertEqual(JalaliDateTime(1367, 2, 14, 4, 30, 0, 0, pytz.utc).timestamp(), 578723400) self.assertEqual(JalaliDateTime.fromtimestamp(578723400, pytz.utc), JalaliDateTime(1367, 2, 14, 4, 30, 0, 0, pytz.utc)) self.assertEqual(JalaliDateTime(1367, 2, 14, 4, 30, 4, 4444).jdate(), JalaliDate(1367, 2, 14)) self.assertEqual(JalaliDateTime(1367, 2, 14, 4, 30, 4, 4444).date(), date(1988, 5, 4)) self.assertEqual(JalaliDateTime(1367, 2, 14, 4, 30, 0, 0).replace(tzinfo=pytz.utc).__repr__(), 'JalaliDateTime(1367, 2, 14, 4, 30, tzinfo=<UTC>)') self.assertEqual(JalaliDateTime(1367, 2, 14, 4, 30, 4, 4444).replace(year=1395, day=3, minute=59), JalaliDateTime(1395, 2, 3, 4, 59, 4, 4444)) self.assertEqual(JalaliDateTime.now(pytz.utc).tzname(), "UTC") self.assertIsNone(JalaliDateTime.today().tzname()) self.assertIsNone(JalaliDateTime.today().dst()) self.assertEqual(JalaliDateTime(1367, 2, 14, 4, 30, 0, 0).ctime(), "Chaharshanbeh 14 Ordibehesht 1367 04:30:00") self.assertEqual(JalaliDateTime(1396, 7, 27, 21, 48, 0, 0).ctime(), "Panjshanbeh 27 Mehr 1396 21:48:00") self.assertEqual(JalaliDateTime(1367, 2, 14, 4, 30, 0, 0).replace(locale="fa").ctime(), "چهارشنبه ۱۴ اردیبهشت ۱۳۶۷ ۰۴:۳۰:۰۰") self.assertEqual(JalaliDateTime(1367, 2, 14, 4, 30, 0, 1, pytz.utc).isoformat(), "1367-02-14T04:30:00.000001+00:00") self.assertEqual(JalaliDateTime(1367, 2, 14, 4, 30, 0, 1, pytz.utc).__str__(), "1367-02-14 04:30:00.000001+00:00")
def test_pickle(self): file = open("save.p", "wb") now = JalaliDateTime.now().replace(tzinfo=pytz.timezone("Asia/Tehran")) pickle.dump(now, file) file.close() file2 = open("save.p", "rb") j = pickle.load(file2) file2.close() self.assertEqual(j, now) os.remove("save.p")
def dashboard_chart_service(investor ,coach ,leader ,referee ,operational, track_info): """get the numbers of karmand an the current year of chart Arguments: investor {OBJECT} -- the role of investor coach {OBJECT} -- the role of coach leader {OBJECT} -- the role of leader referee {OBJECT} -- the role of referee operational {OBJECT} -- the role of operational Returns: DICT -- returns the current year and all monthes of jalali and numbers of karmands """ all_investorses = models.User.objects.filter(role=investor).count() all_startupses = StartUp.objects.all().count() all_coaches = models.User.objects.filter(role=coach).count() all_leaderes = models.User.objects.filter(role=leader).count() all_operationales = models.User.objects.filter( role=operational).count() all_referees = models.User.objects.filter(role=referee).count() th_year = JalaliDateTime.now().year chart = (StartUp.objects.filter(created_date__range=[get_date_jalali(int(th_year), month+1, 1), get_date_jalali(int(th_year), month+1, 31)]).count() for month in range(12)) monthes = [] for _ in range(12): monthes.append(chart.__next__()) status = "وارد پنل مدیریت شد" status_of_user(track_info, status, 'import-dashboard-administrator') return { 'farvardin': monthes[0], 'ordi': monthes[1], 'khurdad': monthes[2], 'tir': monthes[3], 'mordad': monthes[4], 'shahrivar': monthes[5], 'mehr': monthes[6], 'aban': monthes[7], 'azar': monthes[8], 'daaay': monthes[9], 'bahman': monthes[10], 'esfand': monthes[11], 'th_year': th_year, "all_investorses": all_investorses, "all_startupses": all_startupses, "all_coaches": all_coaches, "all_leaderes": all_leaderes, "all_operationales": all_operationales, "all_referees": all_referees}
def order_list(): database = current_app.config['DATABASE_NAME'] client = MongoClient('localhost', 27017) db = client[database] res = list(db.basket.find()) for i in res: i["_id"] = str(i["_id"]) i["time_record"] = digits.en_to_fa( JalaliDate((JalaliDateTime.to_jalali(i["time_record"]))).strftime("%Y/%m/%d")) # i["total_costs"] = digits.en_to_fa(str(i["total_costs"])) i["total_costs"] = f"{i['total_costs']:,}" res = list(db.basket.find()) for i in res: i["_id"] = str(i["_id"]) i["time_record"] = digits.en_to_fa( JalaliDate((JalaliDateTime.to_jalali(i["time_record"]))).strftime("%Y/%m/%d")) # i["total_costs"] = digits.en_to_fa(str(i["total_costs"])) i["total_costs"] = f"{i['total_costs']:,}" i["time_give"] = digits.en_to_fa( JalaliDate((JalaliDateTime.to_jalali(i["time_give"]))).strftime("%Y/%m/%d")) return jsonify(list(res))
def _send_user_timesheet(user): j_now = JalaliDateTime.now() receiver_email = settings.TIMESHEETS_RECEIVER_EMAIL if not receiver_email: raise ValueError("No receiver email address.") if not user.email: logging.info( f"User ({user.username}) email not found. Emailing the corresponding timesheet ignored." ) return cc_list = [] if user.email: cc_list.append(user.email) if user.detail.manager_email: cc_list.append(user.detail.manager_email) body_text = f'''Hello, Here is the timesheet of a user at SahaBee. This email is sent automatically by SahaBee, since the user was actively rollcalling at SahaBee during the last few days. User Information: First name: {user.first_name} Last name: {user.last_name} Personnel code: {user.detail.personnel_code} Username (at SahaBee): {user.username} Sincerely, SahaBee ----------------------- Let the good times roll! https://sahabee.ir ''' message = EmailMessage( 'SahaBee User Timesheet', body_text, from_email=user.email, to=[receiver_email], cc=cc_list, attachments=[( f'timesheet-{user.detail.personnel_code}.xlsx', ExcelConverter.generate_excel_file(user, j_now.year, j_now.month).getvalue(), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' )]) message.send() logging.info( f"Successfully emailed timesheet of '{user.username}' to '{settings.TIMESHEETS_RECEIVER_EMAIL}'." )
def jsort (self): worldtime = self.ti w = str(worldtime).split() #date date = w[0].split('-') #time time = w[1].split(':') jsoort = JalaliDateTime.to_jalali(datetime.datetime( int(date[0]), int(date[1]), int(date[2]), int(time[0]), int(time[1]), int(time[2])) ).strftime("%Y%m%d%H%M%S") return jsoort
def jconvert (self): worldtime = self.ti w = str(worldtime).split() #date date = w[0].split('-') #time time = w[1].split(':') convert = JalaliDateTime.to_jalali(datetime.datetime( int(date[0]), int(date[1]), int(date[2]), int(time[0]), int(time[1]), int(time[2])) ).strftime(self.jformat) return convert
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 __fill_data(self, sheet): for row in range(self.DATA_FIRST_ROW, self.DATA_FIRST_ROW + 31): for col in range(self.DATA_FIRST_COLUMN, self.DATA_FIRST_COLUMN + 11): sheet[self.__get_cell_label(row, col)] = '00:00' current_row_number = self.DATA_FIRST_ROW - 1 last_day = -1 current_column_number = self.DATA_FIRST_COLUMN for rollout in self.rollouts: rtime = rollout.time.astimezone(pytz.timezone(settings.TIME_ZONE)) day_of_month = JalaliDateTime(rtime).day if last_day != day_of_month: current_row_number += 1 current_column_number = self.DATA_FIRST_COLUMN last_day = day_of_month while (current_row_number - self.DATA_FIRST_ROW + 1) < day_of_month: current_row_number += 1 sheet[self.__get_cell_label(current_row_number, current_column_number)] \ = rtime.strftime('%H:%M') current_column_number += 1
def _send_user_timesheet(user): j_now = JalaliDateTime.now() if not user.detail.work_email: logging.info(f"User ({user.username}) work email not found. Emailing the corresponding timesheet ignored.") return receiver_email = user.detail.work_email if j_now.day == 1: # The timesheet of the previous month should be sent in the first day of each month. report_jdatetime = j_now - timedelta(days=1) else: report_jdatetime = j_now timesheet_file = ExcelConverter.generate_excel_file(user, report_jdatetime.year, report_jdatetime.month).getvalue() body_text = f'''Hello, Here is the timesheet of you at SahaBee. As soon as possible, forward this email to the Office This email is sent automatically, since you have actively roll-calling at SahaBee during the last few days. User Information: First name: {user.first_name} Last name: {user.last_name} Personnel code: {user.detail.personnel_code} Username (at SahaBee): {user.username} Sincerely, SahaBee ----------------------- Let the good times roll! https://sahabee.ir ''' message = EmailMessage('SahaBee User Timesheet', body_text, to=[receiver_email], attachments=[(f'timesheet-{user.detail.personnel_code}.xlsx', timesheet_file, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')]) message.send() logging.info(f"Successfully emailed timesheet of '{user.username}' to '{settings.TIMESHEETS_RECEIVER_EMAIL}'.")
def get_jalali_send_date(self, obj): return JalaliDateTime( obj.send_date.astimezone( timezone.get_default_timezone())).strftime("%Y/%m/%d %H:%M:%S")