def test_days(self): w = Week(2011, 20) self.assertEqual(w.monday().isoformat(), "2011-05-16") self.assertEqual(w.tuesday().isoformat(), "2011-05-17") self.assertEqual(w.wednesday().isoformat(), "2011-05-18") self.assertEqual(w.thursday().isoformat(), "2011-05-19") self.assertEqual(w.friday().isoformat(), "2011-05-20") self.assertEqual(w.saturday().isoformat(), "2011-05-21") self.assertEqual(w.sunday().isoformat(), "2011-05-22") self.assertEqual(w.day(0).isoformat(), "2011-05-16") self.assertEqual(w.day(-1).isoformat(), "2011-05-15") self.assertEqual(w.day(10).isoformat(), "2011-05-26") days = w.days() self.assertEqual(len(days), 7) self.assertEqual(days[0].isoformat(), "2011-05-16") self.assertEqual(days[-1].isoformat(), "2011-05-22") from datetime import date self.assertFalse(w.contains(date(2011, 5, 15))) self.assertTrue(w.contains(date(2011, 5, 16))) self.assertTrue(w.contains(date(2011, 5, 22))) self.assertFalse(w.contains(date(2011, 5, 23)))
def test_days(self): w = Week(2011, 20) self.assertEqual(w.monday().isoformat(), "2011-05-16") self.assertEqual(w.tuesday().isoformat(), "2011-05-17") self.assertEqual(w.wednesday().isoformat(), "2011-05-18") self.assertEqual(w.thursday().isoformat(), "2011-05-19") self.assertEqual(w.friday().isoformat(), "2011-05-20") self.assertEqual(w.saturday().isoformat(), "2011-05-21") self.assertEqual(w.sunday().isoformat(), "2011-05-22") self.assertEqual(w.day(0).isoformat(), "2011-05-16") self.assertEqual(w.day(-1).isoformat(), "2011-05-15") self.assertEqual(w.day(10).isoformat(), "2011-05-26") days = w.days() self.assertEqual(len(days), 7) self.assertEqual(days[0].isoformat(), "2011-05-16") self.assertEqual(days[-1].isoformat(), "2011-05-22") from datetime import date self.assertFalse(w.contains(date(2011,5,15))) self.assertTrue(w.contains(date(2011,5,16))) self.assertTrue(w.contains(date(2011,5,22))) self.assertFalse(w.contains(date(2011,5,23)))
def reports(): form = ReportForm() form1 = ReportForm() form2 = ReportForm() #GRAPH WORK date_booked = db.session.query(Booking).filter( Booking.date_booked).order_by(Booking.date_booked.asc()).all() booking_schema = BookingSchema(many=True) date_booked = booking_schema.dump(date_booked) date_booked = [ls["date_booked"][:10] for ls in date_booked] date_vs_booking = {i: date_booked.count(i) for i in date_booked} number_of_bookings = list(date_vs_booking.values()) date_labels = list(date_vs_booking.keys()) last_update_time = datetime.utcnow().strftime('%H:%M') #abs_path = os.path.abspath("../"+"./BBS/bbs/reports") #path to save reports if request.method == 'POST' and 'date' in request.form: #flash() #Generate CSV for Daily bookings booked_today = db.session.query(Booking).filter( Booking.date_booked == form.date.data).order_by( Booking.date_booked.asc()).all() if len(booked_today) != 0: with open(dir_of_interest + './daily_bookings.csv', 'w', newline='') as f: out = csv.writer(f) out.writerow([ 'Ticket Number', 'Name', 'Phone', 'Bus', 'Seat', 'Departure Date', 'Time', 'Amount', 'Date Booked' ]) for booking in booked_today: out.writerow([ booking.ticket_number, booking.customer.name, booking.phone, booking.bus.name, booking.seat.name, booking.date.strftime('%Y-%m-%d'), booking.route.time, booking.route.amount, booking.date_booked ]) return redirect(url_for('myadmin.export_dailybookings_csv')) flash('Daily Report Exported', 'success') else: flash('No Reports for day selected', 'info') bookings = Booking.query.all() query = [booking.date_booked for booking in bookings] #Generate Monthly Report if request.method == 'POST' and 'month' in request.form: month = form1.month.data month_book_dates = [l for l in query if month in l] with open(dir_of_interest + './monthly_bookings.csv', 'w', newline='') as f: out = csv.writer(f) out.writerow([ 'Ticket Number', 'Name', 'Phone', 'Bus', 'Seat', 'Departure Date', 'Time', 'Amount', 'Date Booked' ]) for book_date in month_book_dates: booking = db.session.query(Booking).filter( Booking.date_booked == book_date).order_by( Booking.date_booked.asc()).all() for booking in booking: out.writerow([ booking.ticket_number, booking.customer.name, booking.phone, booking.bus.name, booking.seat.name, booking.date.strftime('%Y-%m-%d'), booking.route.time, booking.route.amount, booking.date_booked ]) #flash('Monthly Report Exported','success') return redirect(url_for('myadmin.export_monthlybookings_csv')) #Generate Weekly Report if request.method == 'POST' and 'week' in request.form: current_wk = form2.week.data if current_wk <= 53: w = Week(2020, current_wk) days_wk = w.days() wk_n = [] for day in days_wk: wk_n.append(day.strftime('%Y-%m-%d')) wkdays_in_bookings = [day for day in wk_n if day in query] if len(wkdays_in_bookings) == 0: flash(f'No bookings for Week {current_wk}', 'info') else: with open(dir_of_interest + './weekly_bookings.csv', 'w', newline='') as f: out = csv.writer(f) out.writerow([ 'Ticket Number', 'Name', 'Phone', 'Bus', 'Seat', 'Departure Date', 'Time', 'Amount', 'Date Booked' ]) for book_date in wkdays_in_bookings: booking = db.session.query(Booking).filter( Booking.date_booked == book_date).order_by( Booking.date_booked.asc()).all() for booking in booking: out.writerow([ booking.ticket_number, booking.customer.name, booking.phone, booking.bus.name, booking.seat.name, booking.date.strftime('%Y-%m-%d'), booking.route.time, booking.route.amount, booking.date_booked ]) return redirect(url_for('myadmin.export_weeklybookings_csv')) else: flash('Week number out of range', 'warning') return render_template('admin/reports.html', number_of_bookings=number_of_bookings, date_labels=date_labels, last_update_time=last_update_time, form=form, form1=form1, form2=form2)