def send_payment_mail(member, amount): msg = MIMEMultipart() msg['From'] = '*****@*****.**' msg['To'] = member.email msg['Subject'] = 'Stregsystem payment' formatted_amount = money(amount) html = f""" <html> <head></head> <body> <p>Hej {member.firstname}!<br><br> Vi har indsat {formatted_amount} stregdollars på din konto: "{member.username}". <br><br> Hvis du ikke ønsker at modtage flere mails som denne kan du skrive en mail til: <a href="mailto:[email protected]?Subject=Klage" target="_top">[email protected]</a><br><br> Mvh,<br> TREOen<br> ====================================================================<br> Hello {member.firstname}!<br><br> We've inserted {formatted_amount} stregdollars on your account: "{member.username}". <br><br> If you do not desire to receive any more mails of this sort, please file a complaint to: <a href="mailto:[email protected]?Subject=Klage" target="_top">[email protected]</a><br><br> Kind regards,<br> TREOen </body> </html> """ msg.attach(MIMEText(html, 'html')) try: smtpObj = smtplib.SMTP('localhost', 25) smtpObj.sendmail('*****@*****.**', member.email, msg.as_string()) except Exception as e: logger.error(str(e))
def sales_api(request): startTime_month = timezone.now() - datetime.timedelta(days=30) qs = (Sale.objects.filter(timestamp__gt=startTime_month).annotate( day=TruncDay('timestamp')).values('day').annotate( c=Count('*')).annotate(r=Sum('price'))) db_sales = {i["day"].date(): (i["c"], money(i["r"])) for i in qs} base = timezone.now().date() date_list = [base - datetime.timedelta(days=x) for x in range(0, 30)] sales_list = [] revenue_list = [] for date in date_list: if date in db_sales: sales, revenue = db_sales[date] sales_list.append(sales) revenue_list.append(revenue) else: sales_list.append(0) revenue_list.append(0) items = { "day": date_list, "sales": sales_list, "revenue": revenue_list, } return JsonResponse(items)
def sale_money_rank(from_time, to_time, rank_limit=10): stat_list = Member.objects.filter(active=True, sale__timestamp__gt=from_time, sale__timestamp__lte=to_time).annotate(Sum('sale__price')).order_by( '-sale__price__sum', 'username')[:rank_limit] for member in stat_list: member.sale__price__sum__formatted = money(member.sale__price__sum) return stat_list
def sales_product(request, ids, from_time, to_time, error=None): date_format = '%Y-%m-%d' if error is not None: return render(request, 'admin/stregsystem/report/error_invalidsalefetch.html', {'error': error}) try: from_time_date = datetime.datetime.strptime(from_time, date_format) from_date_time_tz_aware = timezone.datetime(from_time_date.year, from_time_date.month, from_time_date.day, tzinfo=pytz.UTC) except (ValueError, TypeError): from_date_time_tz_aware = first_of_month(timezone.now()) from_time = from_date_time_tz_aware.strftime(date_format) try: to_date_time = late(timezone.datetime.strptime(to_time, date_format)) to_date_time_tz_aware = timezone.datetime(to_date_time.year, to_date_time.month, to_date_time.day, tzinfo=pytz.UTC) except (ValueError, TypeError): to_date_time = timezone.now() to_time = to_date_time.strftime(date_format) sales = [] if ids is not None and len(ids) > 0: products = reduce(lambda a, b: a + str(b) + ' ', ids, '') query = reduce(lambda x, y: x | y, [Q(id=z) for z in ids]) query &= Q(sale__timestamp__gt=from_date_time_tz_aware) query &= Q(sale__timestamp__lte=to_date_time_tz_aware) result = Product.objects.filter(query).annotate( Count('sale'), Sum('sale__price')) count = 0 sum = 0 for r in result: sales.append( (r.pk, r.name, r.sale__count, money(r.sale__price__sum))) count = count + r.sale__count sum = sum + r.sale__price__sum sales.append(('', 'TOTAL', count, money(sum))) return render(request, 'admin/stregsystem/report/sales.html', locals())
def __unicode__(self): return self.member.username + " " + self.product.name + " (" + money( self.price) + ") " + str(self.timestamp)
def price_display(self): return money(self.price) + " kr."
def __unicode__(self): return self.product.name + ": " + money(self.price) + " (" + str( self.changed_on) + ")"
def __unicode__(self): return active_str(self.active) + " " + self.name + " (" + money( self.price) + ")"
def __unicode__(self): return self.member.username + " " + str(self.timestamp) + ": " + money( self.amount)
def amount_display(self): return money(self.amount) + " kr."
def __unicode__(self): return self.username + active_str( self.active) + ": " + self.email + " " + money(self.balance)
def balance_display(self): return money(self.balance) + " kr."
def price_display(value): return money(value) + " kr."
def __str__(self): return active_str( self.active ) + " " + self.username + ": " + self.firstname + " " + self.lastname + " | " + self.email + " (" + money( self.balance) + ")"
def get_amount_display(self, obj): return money(obj.amount)