Passed
Push — main ( 7b1e25...2a16e1 )
by Jochen
02:27
created

byceps.services.shop.order.order_invoice_domain_service   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 32
dl 0
loc 53
rs 10
c 0
b 0
f 0
wmc 2

2 Functions

Rating   Name   Duplication   Size   Complexity  
A create_invoice() 0 18 1
A _build_order_invoice_created_log_entry() 0 14 1
1
"""
2
byceps.services.shop.order.order_invoice_domain_service
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
:Copyright: 2014-2024 Jochen Kupperschmidt
6
:License: Revised BSD (see `LICENSE` file for details)
7
"""
8
9
from datetime import datetime
10
11
from byceps.services.user.models.user import User
12
from byceps.util.uuid import generate_uuid7
13
14
from .models.invoice import Invoice
15
from .models.log import OrderLogEntry
16
from .models.order import OrderID
17
18
19
def create_invoice(
20
    order_id: OrderID,
21
    initiator: User,
22
    number: str,
23
    *,
24
    url: str | None = None,
25
) -> tuple[Invoice, OrderLogEntry]:
26
    """Create an invoice for an order."""
27
    invoice = Invoice(
28
        id=generate_uuid7(),
29
        order_id=order_id,
30
        number=number,
31
        url=url,
32
    )
33
34
    log_entry = _build_order_invoice_created_log_entry(invoice, initiator)
35
36
    return invoice, log_entry
37
38
39
def _build_order_invoice_created_log_entry(
40
    invoice: Invoice, initiator: User
41
) -> OrderLogEntry:
42
    data = {
43
        'initiator_id': str(initiator.id),
44
        'invoice_number': invoice.number,
45
    }
46
47
    return OrderLogEntry(
48
        id=generate_uuid7(),
49
        occurred_at=datetime.utcnow(),
50
        event_type='order-invoice-created',
51
        order_id=invoice.order_id,
52
        data=data,
53
    )
54