Skip to content
Snippets Groups Projects
rules.py 5.28 KiB
Newer Older
Tom Teichler's avatar
Tom Teichler committed
import rules
from payments import PaymentStatus

Nik | Klampfradler's avatar
Nik | Klampfradler committed
from aleksis.core.util.predicates import (
    has_any_object,
    has_global_perm,
    has_object_perm,
    has_person,
    is_site_preference_set,
)
Tom Teichler's avatar
Tom Teichler committed

from .models.base import Client
from .models.invoice import InvoiceGroup
from .predicates import (
    has_no_payment_variant,
    has_payment_variant,
    is_in_payment_status,
    is_own_invoice,
)
Tom Teichler's avatar
Tom Teichler committed

Tom Teichler's avatar
Tom Teichler committed
# View clients
view_clients_predicate = has_person & (
    has_global_perm("tezor.view_client") | has_any_object("tezor.view_client", Client)
)
rules.add_perm("tezor.view_clients_rule", view_clients_predicate)

Tom Teichler's avatar
Tom Teichler committed
# View client
view_client_predicate = has_person & (
    has_global_perm("tezor.view_client") | has_object_perm("tezor.view_client")
)
rules.add_perm("tezor.view_client_rule", view_client_predicate)

Tom Teichler's avatar
Tom Teichler committed
# Edit clients
Tom Teichler's avatar
Tom Teichler committed
edit_client_predicate = has_person & (
    has_global_perm("tezor.edit_client") | has_object_perm("tezor.edit_client")
Tom Teichler's avatar
Tom Teichler committed
)
Tom Teichler's avatar
Tom Teichler committed
rules.add_perm("tezor.edit_client_rule", edit_client_predicate)
Tom Teichler's avatar
Tom Teichler committed

# Create clients
create_client_predicate = has_person & (
Tom Teichler's avatar
Tom Teichler committed
    has_global_perm("tezor.create_client") | has_any_object("tezor.create_client", Client)
)
rules.add_perm("tezor.create_client_rule", create_client_predicate)
Tom Teichler's avatar
Tom Teichler committed

# Delete clients
Tom Teichler's avatar
Tom Teichler committed
delete_client_predicate = has_person & (
    has_global_perm("tezor.delete_client") | has_object_perm("tezor.delete_client")
Tom Teichler's avatar
Tom Teichler committed
)
Tom Teichler's avatar
Tom Teichler committed
rules.add_perm("tezor.delete_client_rule", delete_client_predicate)
Tom Teichler's avatar
Tom Teichler committed

# View invoice groups
view_invoice_groups_predicate = has_person & (
Nik | Klampfradler's avatar
Nik | Klampfradler committed
    has_global_perm("tezor.view_invoice_group")
    | has_any_object("tezor.view_invoice_group", InvoiceGroup)
Tom Teichler's avatar
Tom Teichler committed
)
rules.add_perm("tezor.view_invoice_groups_rule", view_invoice_groups_predicate)

Tom Teichler's avatar
Tom Teichler committed
# View invoice_group
view_invoice_group_predicate = has_person & (
    has_global_perm("tezor.view_invoice_group") | has_object_perm("tezor.view_invoice_group")
)
rules.add_perm("tezor.view_invoice_group_rule", view_invoice_group_predicate)

Tom Teichler's avatar
Tom Teichler committed
# Edit invoice groups
Tom Teichler's avatar
Tom Teichler committed
edit_invoice_group_predicate = has_person & (
    has_global_perm("tezor.edit_invoice_group") | has_object_perm("tezor.edit_invoice_group")
Tom Teichler's avatar
Tom Teichler committed
)
Tom Teichler's avatar
Tom Teichler committed
rules.add_perm("tezor.edit_invoice_group_rule", edit_invoice_group_predicate)
Tom Teichler's avatar
Tom Teichler committed

# Create invoice groups
create_invoice_groups_predicate = has_person & (
Nik | Klampfradler's avatar
Nik | Klampfradler committed
    has_global_perm("tezor.create_invoice_group")
    | has_any_object("tezor.create_invoice_group", InvoiceGroup)
Tom Teichler's avatar
Tom Teichler committed
)
rules.add_perm("tezor.create_invoice_groups_rule", create_invoice_groups_predicate)

# Delete invoice groups
delete_invoice_groups_predicate = has_person & (
Nik | Klampfradler's avatar
Nik | Klampfradler committed
    has_global_perm("tezor.delete_invoice_group")
    | has_any_object("tezor.delete_invoice_group", InvoiceGroup)
Tom Teichler's avatar
Tom Teichler committed
)
rules.add_perm("tezor.delete_invoice_groups_rule", delete_invoice_groups_predicate)

# Display invoice billing information
Nik | Klampfradler's avatar
Nik | Klampfradler committed
display_billing_predicate = has_person & (
    is_own_invoice
    | has_global_perm("tezor.display_billing")
    | has_object_perm("tezor.display_billing")
)
rules.add_perm("tezor.display_billing_rule", display_billing_predicate)

# Display invoice purchased items
Nik | Klampfradler's avatar
Nik | Klampfradler committed
display_purchased_items_predicate = has_person & (
    is_own_invoice
    | has_global_perm("tezor.display_purchased_items")
    | has_object_perm("tezor.display_purchased_items")
)
rules.add_perm("tezor.display_purchased_items_rule", display_purchased_items_predicate)

# Change payment variant
Nik | Klampfradler's avatar
Nik | Klampfradler committed
change_payment_variant_predicate = (
    has_person
    & is_in_payment_status(PaymentStatus.WAITING)
    & (
        (
            (is_own_invoice | is_site_preference_set("payments", "public_payments"))
            & (has_no_payment_variant | has_payment_variant("pledge"))
        )
Nik | Klampfradler's avatar
Nik | Klampfradler committed
        | has_global_perm("tezor.change_payment_variant")
        | has_object_perm("tezor.change_payment_variant")
    )
)
rules.add_perm("tezor.change_payment_variant", change_payment_variant_predicate)

# Start payment
Nik | Klampfradler's avatar
Nik | Klampfradler committed
do_payment_predicate = (
    has_person
    & (
        is_in_payment_status(PaymentStatus.WAITING)
        | is_in_payment_status(PaymentStatus.INPUT)
        | is_in_payment_status(PaymentStatus.ERROR)
        | is_in_payment_status(PaymentStatus.REJECTED)
    )
    & (
        (is_own_invoice | is_site_preference_set("payments", "public_payments"))
        | has_global_perm("tezor.do_payment")
        | has_object_perm("tezor.do_payment")
    )
)
rules.add_perm("tezor.do_payment", do_payment_predicate)

Tom Teichler's avatar
Tom Teichler committed
# View invoice
Nik | Klampfradler's avatar
Nik | Klampfradler committed
view_invoice_predicate = (
    has_person & is_own_invoice
    | is_site_preference_set("payments", "public_payments")
    | has_global_perm("tezor.view_invoice")
    | has_object_perm("tezor.view_invoice")
)
Tom Teichler's avatar
Tom Teichler committed
rules.add_perm("tezor.view_invoice_rule", view_invoice_predicate)
Nik | Klampfradler's avatar
Nik | Klampfradler committed
print_invoice_predicate = (
    view_invoice_predicate & display_billing_predicate & display_purchased_items_predicate
)
Tom Teichler's avatar
Tom Teichler committed
rules.add_perm("tezor.print_invoice_rule", print_invoice_predicate)

# Send invoice email
send_invoice_email_predicate = (
    has_person & is_own_invoice
    | has_global_perm("tezor.send_invoice_email")
    | has_object_perm("tezor.send_invoice_email")
)
rules.add_perm("tezor.send_invoice_email_rule", send_invoice_email_predicate)
Tom Teichler's avatar
Tom Teichler committed

view_own_invoices_predicate = has_person
rules.add_perm("tezor.view_own_invoices_list_rule", view_own_invoices_predicate)
Jonathan Weth's avatar
Jonathan Weth committed
view_menu_predicate = (
    view_own_invoices_predicate | view_clients_predicate | view_invoice_groups_predicate
)
rules.add_perm("tezor.view_menu_rule", view_menu_predicate)