Add delivery full report

This commit is contained in:
Yohan Boniface 2019-03-23 12:20:49 +01:00
parent e7e82f2c99
commit dc520ace5e
3 changed files with 58 additions and 22 deletions

View file

@ -6,12 +6,10 @@ import ujson as json
import hupper
import minicli
from jinja2 import Environment, PackageLoader, select_autoescape
from openpyxl import Workbook
from openpyxl.writer.excel import save_virtual_workbook
from roll import Roll, Response
from roll.extensions import cors, options, traceback, simple_server, static
from . import config
from . import config, reports
from .models import Delivery, Order, Person, Product, ProductOrder
@ -181,23 +179,16 @@ async def import_commande(request, response, id):
@app.route("/livraison/{id}/rapport.xlsx", methods=["GET"])
async def xls_report(request, response, id):
delivery = Delivery.load(id)
wb = Workbook()
ws = wb.active
ws.title = f"Commande Epinamap - {delivery.producer} - {delivery.when.date()}"
ws.append(["ref", "produit", "prix", "unités", "total"])
for product in delivery.products:
wanted = delivery.product_wanted(product)
ws.append(
[
product.ref,
product.name,
product.price,
wanted,
round(product.price * wanted, 2),
]
)
ws.append(["", "", "", "Total", delivery.total])
response.body = save_virtual_workbook(wb)
response.body = reports.summary(delivery)
mimetype = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
response.headers["Content-Disposition"] = f'attachment; filename="export.xlsx"'
response.headers["Content-Type"] = f"{mimetype}; charset=utf-8"
@app.route("/livraison/{id}/rapport-complet.xlsx", methods=["GET"])
async def xls_full_report(request, response, id):
delivery = Delivery.load(id)
response.body = reports.full(delivery)
mimetype = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
response.headers["Content-Disposition"] = f'attachment; filename="export.xlsx"'
response.headers["Content-Type"] = f"{mimetype}; charset=utf-8"

42
kaba/reports.py Normal file
View file

@ -0,0 +1,42 @@
from openpyxl import Workbook
from openpyxl.writer.excel import save_virtual_workbook
def summary(delivery):
wb = Workbook()
ws = wb.active
ws.title = f"Commande Epinamap - {delivery.producer} - {delivery.when.date()}"
ws.append(["ref", "produit", "prix", "unités", "total"])
for product in delivery.products:
wanted = delivery.product_wanted(product)
ws.append(
[
product.ref,
product.name,
product.price,
wanted,
round(product.price * wanted, 2),
]
)
ws.append(["", "", "", "Total", delivery.total])
return save_virtual_workbook(wb)
def full(delivery):
wb = Workbook()
ws = wb.active
ws.title = f"Epinamap - {delivery.producer} - {delivery.when.date()}"
headers = ["ref", "produit", "prix"] + [e for e in delivery.orders] + ["total"]
ws.append(headers)
for product in delivery.products:
row = [product.ref, product.name, product.price]
for order in delivery.orders.values():
wanted = order.products.get(product.ref)
row.append(wanted.wanted if wanted else 0)
row.append(delivery.product_wanted(product))
ws.append(row)
footer = ["Total", "", ""] + [
o.total(delivery.products) for o in delivery.orders.values()
] + [delivery.total]
ws.append(footer)
return save_virtual_workbook(wb)

View file

@ -27,11 +27,11 @@
<th>{{ delivery.product_wanted(product) }}</th>
</tr>
{% endfor %}
<tr><th class="total"><i class="icon-pricetags"></i> Total</th><td class="total">{{ delivery.total }} €</td>
<tr><th class="total"><i class="icon-pricetags"></i> Total</th><td></td>
{% for email, order in delivery.orders.items() %}
<td>{{ order.total(delivery.products) }} €</td>
{% endfor %}
<th></th>
<td class="total">{{ delivery.total }} €</td>
</tr>
</tbody>
</table>
@ -43,6 +43,9 @@
<li>
<a href="/livraison/{{ delivery.id }}/rapport.xlsx"><i class="icon-download"></i> Rapport résumé</a>
</li>
<li>
<a href="/livraison/{{ delivery.id }}/rapport-complet.xlsx"><i class="icon-download"></i> Rapport complet</a>
</li>
<li>
<label for="import-command" class="toggle-label"><i class="icon-paperclip"></i> Importer une commande</label>
<input type="checkbox" id="import-command" class="toggle">