Skip to content

Commit

Permalink
[Issue #174] defined estimation, agreement, resource, resource manage…
Browse files Browse the repository at this point in the history
…r,..... fixed several issues caused by the changes
  • Loading branch information
scaphilo committed Sep 13, 2018
1 parent 662e8fd commit 5c2d57f
Show file tree
Hide file tree
Showing 22 changed files with 691 additions and 357 deletions.
22 changes: 14 additions & 8 deletions koalixcrm/crm/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from koalixcrm.crm.documents.contract import Contract, OptionContract
from koalixcrm.crm.product.tax import Tax, OptionTax
from koalixcrm.crm.product.unit import Unit, OptionUnit
from koalixcrm.crm.product.product_type import ProductType, OptionProductType
from koalixcrm.crm.product.product_type import ProductType, ProductTypeAdminView
from koalixcrm.crm.product.currency import Currency, OptionCurrency
from koalixcrm.crm.contact.customer import Customer, OptionCustomer
from koalixcrm.crm.contact.supplier import Supplier, OptionSupplier
Expand All @@ -19,13 +19,16 @@
from koalixcrm.crm.contact.person import Person
from koalixcrm.crm.contact.contact import OptionPerson, CallForContact, VisitForContact
from koalixcrm.crm.contact.call import OptionCall, OptionVisit
from koalixcrm.crm.reporting.task import Task, OptionTask
from koalixcrm.crm.reporting.task import Task, TaskAdminView
from koalixcrm.crm.reporting.task_link_type import TaskLinkType, OptionTaskLinkType
from koalixcrm.crm.reporting.task_status import TaskStatus, OptionTaskStatus
from koalixcrm.crm.reporting.project import Project, OptionProject
from koalixcrm.crm.reporting.resource_type import ResourceType, ResourceTypeAdminView
from koalixcrm.crm.reporting.human_resource import HumanResource, HumanResourceAdminView
from koalixcrm.crm.reporting.resource_manager import ResourceManager, ResourceManagerAdminView
from koalixcrm.crm.reporting.project import Project, ProjectAdminView
from koalixcrm.crm.reporting.project_link_type import ProjectLinkType, OptionProjectLinkType
from koalixcrm.crm.reporting.project_status import ProjectStatus, OptionProjectStatus
from koalixcrm.crm.reporting.work import Work, OptionWork
from koalixcrm.crm.reporting.work import Work, WorkAdminView
from koalixcrm.crm.reporting.reporting_period import ReportingPeriod, ReportingPeriodAdmin
from koalixcrm.crm.reporting.reporting_period_status import ReportingPeriodStatus, OptionReportingPeriodStatus

Expand All @@ -49,13 +52,16 @@
admin.site.register(Unit, OptionUnit)
admin.site.register(Currency, OptionCurrency)
admin.site.register(Tax, OptionTax)
admin.site.register(ProductType, OptionProductType)
admin.site.register(ProductType, ProductTypeAdminView)

admin.site.register(Task, OptionTask)
admin.site.register(Task, TaskAdminView)
admin.site.register(TaskLinkType, OptionTaskLinkType)
admin.site.register(TaskStatus, OptionTaskStatus)
admin.site.register(Work, OptionWork)
admin.site.register(Project, OptionProject)
admin.site.register(Work, WorkAdminView)
admin.site.register(HumanResource, HumanResourceAdminView)
admin.site.register(ResourceType, ResourceTypeAdminView)
admin.site.register(ResourceManager, ResourceManagerAdminView)
admin.site.register(Project, ProjectAdminView)
admin.site.register(ProjectLinkType, OptionProjectLinkType)
admin.site.register(ProjectStatus, OptionProjectStatus)
admin.site.register(ReportingPeriod, ReportingPeriodAdmin)
Expand Down
10 changes: 10 additions & 0 deletions koalixcrm/crm/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,23 @@

from koalixcrm.crm.product.currency import *
from koalixcrm.crm.product.price import *
from koalixcrm.crm.product.product import *
from koalixcrm.crm.product.product_type import *
from koalixcrm.crm.product.product_price import *
from koalixcrm.crm.product.customer_group_transform import *
from koalixcrm.crm.product.unit_transform import *
from koalixcrm.crm.product.tax import *
from koalixcrm.crm.product.unit import *

from koalixcrm.crm.reporting.agreement import *
from koalixcrm.crm.reporting.agreement_status import *
from koalixcrm.crm.reporting.agreement_type import *
from koalixcrm.crm.reporting.agreement_status import *
from koalixcrm.crm.reporting.estimation import *
from koalixcrm.crm.reporting.human_resource import *
from koalixcrm.crm.reporting.resource_manager import *
from koalixcrm.crm.reporting.resource_type import *
from koalixcrm.crm.reporting.resource_price import *
from koalixcrm.crm.reporting.generic_task_link import *
from koalixcrm.crm.reporting.task import *
from koalixcrm.crm.reporting.task_link_type import *
Expand Down
14 changes: 7 additions & 7 deletions koalixcrm/crm/product/currency_transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@

class CurrencyTransform(models.Model):
from_currency = models.ForeignKey('Currency',
verbose_name=_("From Currency"),
related_name="db_reltransformfromcurrency")
verbose_name=_("From Currency"),
related_name="db_reltransformfromcurrency")
to_currency = models.ForeignKey('Currency',
verbose_name=_("To Currency"),
related_name="db_reltransformtocurrency")
product = models.ForeignKey('Product',
verbose_name=_("Product"))
verbose_name=_("To Currency"),
related_name="db_reltransformtocurrency")
product_type = models.ForeignKey('ProductType',
verbose_name=_("Product"))
factor = models.IntegerField(verbose_name=_("Factor between From and To Currency"),
blank=True,
null=True)
Expand All @@ -30,7 +30,7 @@ class Meta:
verbose_name_plural = _('Currency Transforms')


class ProductCurrencyTransform(admin.TabularInline):
class CurrencyTransformInlineAdminView(admin.TabularInline):
model = CurrencyTransform
extra = 1
classes = ['collapse']
Expand Down
6 changes: 3 additions & 3 deletions koalixcrm/crm/product/customer_group_transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ class CustomerGroupTransform(models.Model):
related_name="db_reltransfromtocustomergroup",
blank=False,
null=False)
product = models.ForeignKey('Product',
verbose_name=_("Product"),
product_type = models.ForeignKey('ProductType',
verbose_name=_("Product Type"),
blank=False,
null=False)
factor = models.IntegerField(verbose_name=_("Factor between From and To Customer Group"),
Expand Down Expand Up @@ -55,7 +55,7 @@ class Meta:
verbose_name_plural = _('Customer Group Price Transforms')


class ProductCustomerGroupTransform(admin.TabularInline):
class CustomerGroupTransformInlineAdminView(admin.TabularInline):
model = CustomerGroupTransform
extra = 1
classes = ['collapse']
Expand Down
20 changes: 0 additions & 20 deletions koalixcrm/crm/product/price.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-

from django.db import models
from django.contrib import admin
from django.utils.translation import ugettext as _
from koalixcrm.crm.product.currency import Currency
from koalixcrm.crm.product.unit import Unit
Expand All @@ -12,8 +11,6 @@


class Price(models.Model):
product_type = models.ForeignKey("Product Type",
verbose_name=_("Product Type"))
unit = models.ForeignKey(Unit,
blank=False,
verbose_name=_("Unit"))
Expand Down Expand Up @@ -149,20 +146,3 @@ class Meta:
app_label = "crm"
verbose_name = _('Price')
verbose_name_plural = _('Prices')


class ProductPrice(admin.TabularInline):
model = Price
extra = 1
classes = ['collapse']
fieldsets = (
('', {
'fields': ('price',
'currency',
'unit',
'valid_from',
'valid_until',
'customer_group')
}),
)
allow_add = True
2 changes: 1 addition & 1 deletion koalixcrm/crm/product/product.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

class Product(models.Model):
identifier = models.CharField(verbose_name=_("Product Number"),
max_lenghth=200,
max_length=200,
null=True,
blank=True)
product_type = models.ForeignKey("ProductType", verbose_name=_("Product Type"))
Expand Down
33 changes: 0 additions & 33 deletions koalixcrm/crm/product/product_costs.py

This file was deleted.

149 changes: 149 additions & 0 deletions koalixcrm/crm/product/product_price.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
# -*- coding: utf-8 -*-

from django.db import models
from django.contrib import admin
from django.utils.translation import ugettext as _
from koalixcrm.crm.contact.customer_group import CustomerGroup
from koalixcrm.crm.product.unit_transform import UnitTransform
from koalixcrm.crm.product.customer_group_transform import CustomerGroupTransform
from koalixcrm.crm.product.currency_transform import CurrencyTransform


class ProductPrice(models.Model):
product_type = models.ForeignKey("ProductType",
verbose_name=_("Product Type"))
price = models.ForeignKey("Price",
blank=False,
verbose_name=_("Price"))

def is_valid_from_criteria_fulfilled(self, date):
if not self.valid_from:
return True
elif (self.valid_from - date).days <= 0:
return True
else:
return False

def is_valid_until_criteria_fulfilled(self, date):
if not self.valid_until:
return True
elif (date - self.valid_until).days <= 0:
return True
else:
return False

def is_customer_group_criteria_fulfilled(self, customer_group):
if not self.customer_group:
return True
elif self.customer_group == customer_group:
return True
else:
return False

def is_currency_criteria_fulfilled(self, currency):
if self.currency == currency:
return True
else:
return False

def is_unit_criteria_fulfilled(self, unit):
if self.unit == unit:
return True
else:
return False

def is_date_in_range(self, date):
if (self.valid_from <= date) and (date <= self.valid_until):
return True
else:
return False

def get_currency_transform_factor(self, currency, product):
"""check currency conditions and factor"""
if self.currency == currency:
currency_factor = 1
else:
currency_transform = CurrencyTransform.objects.get(from_currency=self.currency,
to_currency=currency,
product=product)
if currency_transform:
currency_transform.get_transfrom_factor()
else:
currency_factor = 0
return currency_factor

def get_unit_transform_factor(self, unit, product):
"""check unit conditions and factor"""
if self.unit == unit:
unit_factor = 1
else:
unit_transform = UnitTransform.objects.get(from_unit=self.unit,
to_unit=unit,
product=product)
if unit_transform:
unit_transform.get_transfrom_factor()
else:
unit_factor = 0
return unit_factor

def get_customer_group_transform_factor(self, customer, product):
"""The function searches through all customer_groups in which the customer is member of
from these customer_groups, the function returns the customer_group with the perfect match
or it returns the factor with the lowest transform factor
Args:
koalixcrm.crm.contact.customer customer
koalixcrm.crm.product.product product
Returns:
Decimal factor
Raises:
No exceptions planned"""
customer_groups = CustomerGroup.objects.filter(customer=customer)
customer_group_factor = 0
for customer_group in customer_groups:
if self.customer_group == customer_group:
customer_group_factor = 1
"""Stop for loop when a perfect match is found"""
break
else:
customer_group = CustomerGroupTransform.objects.get(from_customer_group=self.customer_group,
to_customer_group=customer_group,
product=product)
if customer_group:
if customer_group_factor > customer_group.get_transfrom_factor():
customer_group_factor = customer_group.get_transfrom_factor()
return customer_group_factor

def matches_date_unit_customer_group_currency(self, date, unit, customer_group, currency):
if (self.is_unit_criteria_fulfilled(unit) &
self.is_currency_criteria_fulfilled(currency) &
self.is_customer_group_criteria_fulfilled(customer_group) &
self.is_valid_from_criteria_fulfilled(date) &
self.is_valid_until_criteria_fulfilled(date)):
return 1
else:
return 0

class Meta:
app_label = "crm"
verbose_name = _('Product Price')
verbose_name_plural = _('Product Prices')


class ProductPriceInlineAdminView(admin.TabularInline):
model = ProductPrice
extra = 1
classes = ['collapse']
fieldsets = (
('', {
'fields': ('price',
'currency',
'unit',
'valid_from',
'valid_until',
'customer_group')
}),
)
allow_add = True
Loading

0 comments on commit 5c2d57f

Please sign in to comment.