Пример #1
0
def resolve_cpq_code(cpq_code, cpq_type=CPQType.INVOICE):
    """Returns the CPQ object (Quote or Invoice) for this `cpq_code`
    """
    check_hash = cpq_code[:CPQ_CHECK_HASH_LENGTH]
    cpq_code = cpq_code[CPQ_CHECK_HASH_LENGTH:]
    if is_valid_cpq_code_check_hash(cpq_code, check_hash):
        if cpq_type == CPQType.INVOICE:
            CPQModel = resolve_model_dynamically(
                settings.HTK_CPQ_INVOICE_MODEL)
        elif cpq_type == CPQType.QUOTE:
            CPQModel = resolve_model_dynamically(settings.HTK_CPQ_QUOTE_MODEL)
        elif cpq_type == CPQType.GROUP_QUOTE:
            CPQModel = resolve_model_dynamically(
                settings.HTK_CPQ_GROUP_QUOTE_MODEL)
        else:
            raise Exception('Bad value for cpq_type')
        try:
            padded = base36_to_int(cpq_code)
            if is_luhn_valid(padded):
                xored = padded // 10
                cpq_id = xored ^ CPQ_XOR_KEY
                cpq = CPQModel.objects.get(id=cpq_id)
            else:
                cpq = None
        except ValueError:
            cpq = None
        except CPQModel.DoesNotExist:
            cpq = None
    else:
        cpq = None
    return cpq
Пример #2
0
def resolve_cpq_code(cpq_code, cpq_type=CPQType.INVOICE):
    """Returns the CPQ object (Quote or Invoice) for this `cpq_code`
    """
    check_hash = cpq_code[:CPQ_CHECK_HASH_LENGTH]
    cpq_code = cpq_code[CPQ_CHECK_HASH_LENGTH:]
    if is_valid_cpq_code_check_hash(cpq_code, check_hash):
        if cpq_type == CPQType.INVOICE:
            CPQModel = resolve_model_dynamically(settings.HTK_CPQ_INVOICE_MODEL)
        elif cpq_type == CPQType.QUOTE:
            CPQModel = resolve_model_dynamically(settings.HTK_CPQ_QUOTE_MODEL)
        else:
            raise Exception('Bad value for cpq_type')
        try:
            padded = base36_to_int(cpq_code)
            if is_luhn_valid(padded):
                xored = padded / 10
                cpq_id = xored ^ CPQ_XOR_KEY
                cpq = CPQModel.objects.get(id=cpq_id)
            else:
                cpq = None
        except ValueError:
            cpq = None
        except CPQModel.DoesNotExist:
            cpq = None
    else:
        cpq = None
    return cpq
Пример #3
0
def get_stripe_customer_model():
    if hasattr(settings, 'HTK_STRIPE_CUSTOMER_MODEL'):
        from htk.utils.general import resolve_model_dynamically
        StripeCustomerModel = resolve_model_dynamically(settings.HTK_STRIPE_CUSTOMER_MODEL)
    else:
        StripeCustomerModel = None
    return StripeCustomerModel
Пример #4
0
 def get_organizations(self):
     from htk.utils.general import resolve_model_dynamically
     Organization = resolve_model_dynamically(
         htk_setting('HTK_ORGANIZATION_MODEL'))
     organizations = Organization.objects.filter(members__user=self.user,
                                                 members__active=True)
     return organizations
Пример #5
0
def get_stripe_customer_model():
    if hasattr(settings, 'HTK_STRIPE_CUSTOMER_MODEL'):
        from htk.utils.general import resolve_model_dynamically
        StripeCustomerModel = resolve_model_dynamically(
            settings.HTK_STRIPE_CUSTOMER_MODEL)
    else:
        StripeCustomerModel = None
    return StripeCustomerModel
Пример #6
0
 def organizations(self):
     from htk.utils.general import resolve_model_dynamically
     Organization = resolve_model_dynamically(
         htk_setting('HTK_ORGANIZATION_MODEL'))
     organizations = Organization.objects.filter(
         members__user=self.user, members__active=True).order_by(
             'name',
             'handle',
         ).distinct()
     return organizations
Пример #7
0
def get_kv_storage_model():
    """Gets the key-value storage model class
    """
    model_name = htk_setting('HTK_KV_STORAGE_MODEL', None)
    if model_name:
        from htk.utils.general import resolve_model_dynamically
        KVStorageModel = resolve_model_dynamically(model_name)
    else:
        KVStorageModel = None
    return KVStorageModel
Пример #8
0
def get_receivables_by_year(year):
    InvoiceModel = resolve_model_dynamically(settings.HTK_CPQ_INVOICE_MODEL)
    receivables = InvoiceModel.objects.filter(
        invoice_type=CPQType.INVOICE.value,
        date__year=year,
        paid=True
    ).order_by(
        'date'
    )
    return receivables
Пример #9
0
 def organizations(self):
     from htk.utils.general import resolve_model_dynamically
     Organization = resolve_model_dynamically(htk_setting('HTK_ORGANIZATION_MODEL'))
     organizations = Organization.objects.filter(
         members__user=self.user,
         members__active=True
     ).order_by(
         'name',
         'handle',
     )
     return organizations
Пример #10
0
def get_kv_storage_model(namespace=None):
    """Gets the key-value storage model class
    """
    if namespace is None:
        namespace = 'default'
    model_name = htk_setting('HTK_KV_STORAGE_MODELS', {}).get(namespace)
    if model_name:
        from htk.utils.general import resolve_model_dynamically
        KVStorageModel = resolve_model_dynamically(model_name)
    else:
        KVStorageModel = None
    return KVStorageModel
Пример #11
0
def get_kv_storage_model(namespace=None):
    """Gets the key-value storage model class
    """
    if namespace is None:
        namespace = 'default'
    model_name = htk_setting('HTK_KV_STORAGE_MODELS', {}).get(namespace)
    if model_name:
        from htk.utils.general import resolve_model_dynamically
        KVStorageModel = resolve_model_dynamically(model_name)
    else:
        KVStorageModel = None
    return KVStorageModel
Пример #12
0
        def wrapped_view(request, *args, **kwargs):
            organization_id = kwargs.get('org_id')
            Organization = resolve_model_dynamically(htk_setting('HTK_ORGANIZATION_MODEL'))
            organization = get_object_or_404(Organization, id=organization_id)
            kwargs['organization'] = organization

            has_permission = False
            user = request.user
            if user.is_authenticated():
                if self.role == OrganizationMemberRoles.OWNER:
                    has_permission = organization.has_owner(user)
                elif self.role == OrganizationMemberRoles.ADMIN:
                    has_permission = organization.has_admin(user)
                elif self.role == OrganizationMemberRoles.MEMBER:
                    has_permission = organization.has_member(user)

            if has_permission:
                response = view_func(request, *args, **kwargs)
            else:
                response = HttpResponseForbidden()
            return response
Пример #13
0
        def wrapped_view(request, *args, **kwargs):
            organization_id = kwargs.get('org_id')
            Organization = resolve_model_dynamically(
                htk_setting('HTK_ORGANIZATION_MODEL'))
            organization = get_object_or_404(Organization, id=organization_id)
            kwargs['organization'] = organization

            has_permission = False
            user = request.user
            if user.is_authenticated():
                if self.role == OrganizationMemberRoles.OWNER:
                    has_permission = organization.has_owner(user)
                elif self.role == OrganizationMemberRoles.ADMIN:
                    has_permission = organization.has_admin(user)
                elif self.role == OrganizationMemberRoles.MEMBER:
                    has_permission = organization.has_member(user)

            if has_permission:
                response = view_func(request, *args, **kwargs)
            else:
                response = HttpResponseForbidden()
            return response
Пример #14
0
def resolve_invoice_code(invoice_code):
    """Returns the Invoice for this `invoice_code`
    """
    check_hash = invoice_code[:INVOICE_CHECK_HASH_LENGTH]
    invoice_code = invoice_code[INVOICE_CHECK_HASH_LENGTH:]
    if is_valid_invoice_code_check_hash(invoice_code, check_hash):
        InvoiceModel = resolve_model_dynamically(settings.HTK_INVOICE_MODEL)
        try:
            padded = base36_to_int(invoice_code)
            if is_luhn_valid(padded):
                xored = padded / 10
                invoice_id = xored ^ INVOICE_XOR_KEY
                invoice = InvoiceModel.objects.get(id=invoice_id)
            else:
                invoice = None
        except ValueError:
            invoice = None
        except InvoiceModel.DoesNotExist:
            invoice = None
    else:
        invoice = None
    return invoice
Пример #15
0
def get_invoice_years():
    InvoiceModel = resolve_model_dynamically(settings.HTK_CPQ_INVOICE_MODEL)
    invoice_years = [
        d.year for d in InvoiceModel.objects.dates('date', 'year')
    ]
    return invoice_years
Пример #16
0
def get_user_profile_model():
    user_profile_model_name = htk_setting("HTK_USER_PROFILE_MODEL")
    UserProfileModel = resolve_model_dynamically(user_profile_model_name)
    return UserProfileModel
Пример #17
0
class HtkOrganizationTeamInline(admin.StackedInline):
    model = resolve_model_dynamically(
        htk_setting('HTK_ORGANIZATION_TEAM_MODEL'))
    extra = 0
    can_delete = True
Пример #18
0
class HtkOrganizationTeamMemberPositionInline(admin.TabularInline):
    model = resolve_model_dynamically(
        htk_setting('HTK_ORGANIZATION_TEAM_MEMBER_POSITION_MODEL'))
    extra = 0
    can_delete = True
Пример #19
0
class HtkOrganizationInvitationInline(admin.TabularInline):
    model = resolve_model_dynamically(
        htk_setting('HTK_ORGANIZATION_INVITATION_MODEL'))
    extra = 0
    can_delete = True
Пример #20
0
class HtkOrganizationAttributeInline(admin.TabularInline):
    model = resolve_model_dynamically(
        htk_setting('HTK_ORGANIZATION_ATTRIBUTE_MODEL'))
    extra = 0
    can_delete = True
Пример #21
0
def get_user_profile_model():
    user_profile_model_name = htk_setting('HTK_USER_PROFILE_MODEL')
    UserProfileModel = resolve_model_dynamically(user_profile_model_name)
    return UserProfileModel
Пример #22
0
def get_receivables_by_year(year):
    InvoiceModel = resolve_model_dynamically(settings.HTK_CPQ_INVOICE_MODEL)
    receivables = InvoiceModel.objects.filter(
        invoice_type=CPQType.INVOICE.value, date__year=year,
        paid=True).order_by('date')
    return receivables
Пример #23
0
def get_invoice_years():
    InvoiceModel = resolve_model_dynamically(settings.HTK_CPQ_INVOICE_MODEL)
    invoice_years = [d.year for d in InvoiceModel.objects.dates('date', 'year')]
    return invoice_years
Пример #24
0
from django.contrib import admin

from htk.utils import htk_setting
from htk.utils.general import resolve_model_dynamically

InvoiceModel = resolve_model_dynamically(htk_setting('HTK_CPQ_INVOICE_MODEL'))
InvoiceLineItemModel = resolve_model_dynamically(htk_setting('HTK_CPQ_INVOICE_LINE_ITEM_MODEL'))
QuoteModel = resolve_model_dynamically(htk_setting('HTK_CPQ_QUOTE_MODEL'))
QuoteLineItemModel = resolve_model_dynamically(htk_setting('HTK_CPQ_QUOTE_LINE_ITEM_MODEL'))

class InvoiceLineItemInline(admin.TabularInline):
    model = InvoiceLineItemModel
    extra = 0
    can_delete = True

class InvoiceAdmin(admin.ModelAdmin):
    model = InvoiceModel

    list_display = (
        'id',
        'customer',
        'notes',
        'total',
        'date',
        'paid',
        'invoice_type',
        'payment_terms',
        'view_invoice_link',
    )

    inlines = (
Пример #25
0
# Django Imports
from django.contrib import admin
from django.utils.safestring import mark_safe

# HTK Imports
from htk.utils import htk_setting
from htk.utils.general import resolve_model_dynamically

GroupQuoteModel = resolve_model_dynamically(
    htk_setting('HTK_CPQ_GROUP_QUOTE_MODEL'))
GroupQuoteLineItemModel = resolve_model_dynamically(
    htk_setting('HTK_CPQ_GROUP_QUOTE_LINE_ITEM_MODEL'))
InvoiceModel = resolve_model_dynamically(htk_setting('HTK_CPQ_INVOICE_MODEL'))
InvoiceLineItemModel = resolve_model_dynamically(
    htk_setting('HTK_CPQ_INVOICE_LINE_ITEM_MODEL'))
QuoteModel = resolve_model_dynamically(htk_setting('HTK_CPQ_QUOTE_MODEL'))
QuoteLineItemModel = resolve_model_dynamically(
    htk_setting('HTK_CPQ_QUOTE_LINE_ITEM_MODEL'))


class InvoiceLineItemInline(admin.TabularInline):
    model = InvoiceLineItemModel
    extra = 0
    can_delete = True


class InvoiceAdmin(admin.ModelAdmin):
    model = InvoiceModel

    list_display = (
        'id',
Пример #26
0
def get_translation_model(translation):
    translations_map = htk_setting('HTK_BIBLE_TRANSLATIONS_MAP')
    translation_model_class = translations_map.get(translation.upper())
    translation_model = (resolve_model_dynamically(translation_model_class)
                         if translation_model_class else None)
    return translation_model