Skip to content

Commit

Permalink
Add a 'Sales' tab to session detail pages
Browse files Browse the repository at this point in the history
  • Loading branch information
sde1000 committed Jan 16, 2024
1 parent f229184 commit 8cd19bd
Show file tree
Hide file tree
Showing 3 changed files with 185 additions and 0 deletions.
90 changes: 90 additions & 0 deletions quicktill/tillweb/datatable.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,96 @@ def sessions(request, info):
})


@tillweb_view
def translines(request, info):
columns = {
'id': Transline.id,
'transid': Transline.transid,
'text': Transline.text,
'department': Transline.dept_id,
'code': Transline.transcode,
'items': Transline.items,
'time': Transline.time,
'amount': Transline.amount,
'discount': Transline.total_discount,
'discount_name': Transline.discount_name,
'total': Transline.total,
'source': Transline.source,
'user': User.fullname,
}
search_value = request.GET.get("search[value]")
q = td.s.query(Transline)\
.join(Transline.department)\
.join(Transline.user, isouter=True)\
.join(Transline.transaction)\
.join(Session, isouter=True)\
.options(contains_eager(Transline.department),
contains_eager(Transline.user),
contains_eager(Transline.transaction))

# Apply filters from parameters. The 'unfiltered' item count for
# this table is after this filtering step.
try:
sessionid = int(request.GET.get('sessionid'))
q = q.filter(Session.id == sessionid)
except (ValueError, TypeError):
pass
try:
deptid = int(request.GET.get('deptid'))
q = q.filter(Department.id == deptid)
except (ValueError, TypeError):
pass

# Apply filters from search value. The 'filtered' item count is
# after this filtering step.
fq = q
if search_value:
try:
intsearch = int(search_value)
except ValueError:
intsearch = None
try:
decsearch = Decimal(search_value)
except Exception:
decsearch = None
qs = [
columns['text'].ilike(f'%{search_value}%'),
columns['source'].ilike(f'{search_value}%'),
columns['user'].ilike(f'%{search_value}%'),
columns['discount_name'].ilike(f'%{search_value}%'),
]
if intsearch:
qs.append(columns['id'] == intsearch)
qs.append(columns['transid'] == intsearch)
qs.append(columns['items'] == intsearch)
if decsearch is not None:
qs.append(columns['amount'] == decsearch)
qs.append(columns['discount'] == decsearch)
fq = q.filter(or_(*qs))

return _datatables_json(
request, q, fq, columns, lambda tl: {
'id': tl.id,
'url': tl.get_absolute_url(),
'transid': tl.transid,
'trans_url': tl.transaction.get_absolute_url(),
'time': tl.time,
'text': tl.text,
'department': tl.department.description,
'department_url': tl.department.get_absolute_url(),
'code': tl.transcode,
'items': tl.items,
'source': tl.source,
'amount': tl.amount,
'discount': tl.total_discount,
'discount_name': tl.discount_name,
'total': tl.total,
'user': tl.user.fullname if tl.user else '',
'user_url': tl.user.get_absolute_url() if tl.user else None,
'DT_RowClass': "table-warning" if tl.transcode == 'V' else None,
})


@tillweb_view
def payments(request, info):
columns = {
Expand Down
93 changes: 93 additions & 0 deletions quicktill/tillweb/templates/tillweb/session.html
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@
Transactions
</a>
</li>
<li class="nav-item">
<a class="nav-link" id="translinesTab" href="#translines" data-toggle="tab" data-target="#translines" role="tab" aria-controls="translines" aria-selected="false">
Sales
</a>
</li>
<li class="nav-item">
<a class="nav-link" id="paymentsTab" href="#payments" data-toggle="tab" data-target="#payments" role="tab" aria-controls="payments" aria-selected="false">
Payments
Expand Down Expand Up @@ -149,6 +154,28 @@
</div>
<div class="tab-pane fade" id="transactions" aria-labelledby="transactionsTab">
</div>
<div class="tab-pane fade" id="translines" aria-labelledby="translinesTab">
<div class="mb-1"></div>
<table class="table table-sm table-striped" id="translinesTable">
<thead class="thead-light">
<tr>
<th scope="col">ID</th>
<th scope="col">Transaction</th>
<th scope="col">Description</th>
<th scope="col">Department</th>
<th scope="col">Items</th>
<th scope="col">Price</th>
<th scope="col">Discount</th>
<th scope="col">Discount type</th>
<th scope="col">Total</th>
<th scope="col">Time</th>
<th scope="col">Source</th>
<th scope="col">User</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tab-pane fade" id="payments" aria-labelledby="paymentsTab">
<div class="mb-1"></div>
<table class="table table-sm table-striped" id="paymentsTable">
Expand Down Expand Up @@ -217,6 +244,7 @@

let depttotals_table = null;
let usertotals_table = null;
let translines_table = null;
let payments_table = null;

function init_depttotals_table() {
Expand Down Expand Up @@ -349,6 +377,61 @@
});
};

function init_translines_table() {
translines_table = $("#translinesTable").DataTable({
ajax: {
url: '{% url "tillweb-datatable-translines" pubname=pubname %}',
dataSrc: 'data',
data: function (d) {
d.sessionid = {{session.id}};
},
},
columns: [
{ data: 'id',
render: render_link('url', DataTable.render.text()),
},
{ data: 'transid',
render: render_link('trans_url', DataTable.render.text()),
},
{ data: 'text',
render: DataTable.render.text(),
},
{ data: 'department',
render: render_link('department_url', DataTable.render.text()),
},
{ data: 'items',
render: DataTable.render.text(),
},
{ data: 'amount',
render: render_money(),
},
{ data: 'discount',
render: render_money(),
},
{ data: 'discount_name',
render: DataTable.render.text(),
},
{ data: 'total',
render: render_money(),
},
{ data: 'time',
render: DataTable.render.datetime(),
searchable: false,
},
{ data: 'source',
render: DataTable.render.text(),
},
{ data: 'user',
render: render_link('user_url', DataTable.render.text()),
},
],
order: [ [0, 'desc'] ],
searching: true,
paging: true,
serverSide: true,
});
};

function init_payments_table() {
payments_table = $("#paymentsTable").DataTable({
ajax: {
Expand Down Expand Up @@ -437,6 +520,16 @@
}
});

$('#translinesTab').on("click", function (e) {
if (translines_table === null) {
init_translines_table();
} else {
{% if not session.endtime %}
translines_table.ajax.reload();
{% endif %}
}
});

$('#paymentsTab').on("click", function (e) {
if (payments_table === null) {
init_payments_table();
Expand Down
2 changes: 2 additions & 0 deletions quicktill/tillweb/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@
name="tillweb-datatable-sessions"),
path('datatable/sessiontotals.json', datatable.sessiontotals,
name="tillweb-datatable-sessiontotals"),
path('datatable/translines.json', datatable.translines,
name="tillweb-datatable-translines"),
path('datatable/payments.json', datatable.payments,
name="tillweb-datatable-payments"),
path('datatable/logs.json', datatable.logs,
Expand Down

0 comments on commit 8cd19bd

Please sign in to comment.