barker/barker/views/guest_book.py

95 lines
3.1 KiB
Python

import uuid
from datetime import datetime, date, timedelta
import transaction
from pyramid.view import view_config
from barker.models import GuestBook, Customer
@view_config(request_method='PUT', route_name='v1_guest_book_new', renderer='json', permission='Users', trans=True)
def save(request):
json = request.json_body
company = json['company'].strip() if json['company'] is not None else ''
name = json['name'].strip()
phone = json['phone']
address = json['address'].strip()
customer = request.dbsession.query(Customer).filter(Customer.phone == phone).first()
if customer is None:
customer = Customer(company, name, phone, address)
request.dbsession.add(customer)
else:
if company != '':
customer.company = company
if name != '':
customer.name = name
if address != '':
customer.address = address
item = GuestBook(pax=json['pax'])
item.customer = customer
request.dbsession.add(item)
transaction.commit()
item = request.dbsession.query(GuestBook).filter(GuestBook.id == item.id).first()
return guest_book_info(item)
@view_config(request_method='GET', route_name='v1_guest_book_id', renderer='json', permission='Authenticated')
def show_id(request):
id_ = request.matchdict['id']
item = request.dbsession.query(GuestBook).filter(GuestBook.id == uuid.UUID(id_)).one()
return guest_book_info(item)
@view_config(request_method='GET', route_name='v1_guest_book_new', renderer='json', permission='Authenticated')
def show_blank(request):
return guest_book_info(None)
@view_config(request_method='GET', route_name='v1_guest_book_list', renderer='json', permission='Authenticated')
def show_list(request):
date_ = request.GET.get('q', None)
if date_ is None or date_ == '':
date_ = date.today().strftime('%d-%b-%Y')
list_ = request.dbsession.query(
GuestBook
).filter(
GuestBook.date >= datetime.strptime(date_, '%d-%b-%Y') - timedelta(minutes=30) # hack for timezone and 5 am
).filter(
GuestBook.date < datetime.strptime(date_, '%d-%b-%Y') - timedelta(minutes=30) + timedelta(days=1)
).order_by(
GuestBook.date
).all()
guest_book = []
for i, item in enumerate(list_):
guest_book.insert(0, {
'id': item.id,
'serial': i + 1,
'company': item.customer.company,
'name': item.customer.name,
'phone': item.customer.phone,
'pax': item.pax,
'status': '' if item.status is None else item.status.status
})
return {"date": date_, "list": guest_book}
def guest_book_info(item):
if item is not None:
return {
'id': item.id,
'company': item.customer.company,
'name': item.customer.name,
'phone': item.customer.phone,
'pax': item.pax,
'address': item.customer.address
}
else:
return {
'company': '',
'name': '',
'phone': '',
'pax': 0,
'address': ''
}