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)))
示例#2
0
    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)))
示例#3
0
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)