opbeans/models.py (64 lines of code) (raw):
from __future__ import unicode_literals
from django.db import models
from django.utils import timezone
class Customer(models.Model):
full_name = models.CharField(max_length=1000)
company_name = models.CharField(max_length=1000)
email = models.EmailField(max_length=1000)
address = models.CharField(max_length=1000)
postal_code = models.CharField(max_length=1000)
city = models.CharField(max_length=1000)
country = models.CharField(max_length=1000)
def __str__(self):
return self.full_name
def to_search(self):
d = {
'_id': self.pk,
'full_name': self.full_name,
'company_name': self.company_name,
'email': self.email,
'address': self.address,
'postal_code': self.postal_code,
'city': self.city,
'country': self.country,
}
if hasattr(self, 'total_orders'):
d['total_orders'] = self.total_orders
return d
class OrderLine(models.Model):
# watch out, hack: Django *really* wants a primary key, so we
# pretend that "order_id" is it. This should be ok as long
# as we only use this for read access
order = models.ForeignKey('Order', on_delete=models.CASCADE)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
amount = models.IntegerField()
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='orders')
created_at = models.DateTimeField(default=timezone.now)
lines = models.ManyToManyField('Product', through=OrderLine)
def to_search(self):
order_lines = list(self.orderline_set.select_related('product').all())
return {
'_id': self.pk,
'customer': {
'id': self.customer.pk,
'full_name': self.customer.full_name,
},
'created_at': self.created_at,
'data': {
'total_amount': sum(line.product.selling_price for line in order_lines) / 100.0,
'cost': sum(line.product.cost for line in order_lines) / 100.0,
'margin': sum((line.product.selling_price - line.product.cost) for line in order_lines) / 100.0,
}
}
class ProductType(models.Model):
name = models.CharField(unique=True, max_length=1000)
def __str__(self):
return self.name
class Product(models.Model):
sku = models.CharField(unique=True, max_length=1000)
name = models.CharField(max_length=1000)
description = models.TextField()
product_type = models.ForeignKey(ProductType, on_delete=models.CASCADE)
stock = models.IntegerField()
cost = models.IntegerField()
selling_price = models.IntegerField()
def __str__(self):
return self.name