Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django.db import models
- from django.contrib.auth.models import User
- import datetime
- from decimal import Decimal
- import pytz
- DAYOFWEEK = ['M','T','W','R','F','S','U']
- class UserProfile(models.Model):
- user = models.ForeignKey(User, unique=True,related_name='user_profiles')
- phone_number = models.CharField(max_length=50)
- PHONE_TYPE_CHOICES = ( ('Mobile','Mobile'), ('Landline','Landline'), )
- phone_type = models.CharField(max_length=15,choices = PHONE_TYPE_CHOICES)
- phone_verified = models.BooleanField(default=False)
- zip_postal = models.CharField(max_length=10)
- address = models.CharField(max_length=50)
- address2 = models.CharField(max_length=50)
- city = models.CharField(max_length=50)
- state_province = models.CharField(max_length=50)
- country = models.CharField(max_length=75)
- reg_ip = models.IPAddressField(editable=False, blank=True,null=True)
- menu_update_notify = models.BooleanField()
- allow_email_marketing = models.BooleanField()
- sms_ordering_enabled = models.BooleanField(default=False)
- CREDIT_CARD_CHOICES = ( ('Visa','Visa'), ('Mastercard','Mastercard'), ('American Express','American Express'), )
- cc_type = models.CharField(max_length=30,choices=CREDIT_CARD_CHOICES)
- cc_number = models.DecimalField(max_digits=16, decimal_places=0)
- cc_expiration = models.DateField()
- cc_customer_name = models.CharField(max_length=50)
- cc_code = models.CharField(max_length=6)
- class Admin:
- pass
- def __str__(self):
- return self.user.username
- class AdminSettings(models.Model):
- COMMON_TIMEZONE_CHOICES = tuple(zip(pytz.common_timezones, pytz.common_timezones))
- timezone = models.CharField(max_length=50, choices=COMMON_TIMEZONE_CHOICES)
- NOTIFY_CHOICES = ( ('Email','Email'), ('SMS','SMS'), ('Fax','Fax') )
- notify1 = models.CharField(max_length=5, choices=NOTIFY_CHOICES)
- notify2 = models.CharField(max_length=5, choices=NOTIFY_CHOICES)
- notify3 = models.CharField(max_length=5, choices=NOTIFY_CHOICES)
- fax_number = models.CharField(max_length=25)
- notify_email_address = models.EmailField()
- sms_gateway_email_address = models.EmailField()
- email_smtp_server = models.CharField(max_length=100)
- email_smtp_port = models.PositiveSmallIntegerField()
- email_auth_username = models.CharField(max_length=50)
- email_auth_password = models.CharField(max_length=50)
- PAYMENT_CHOICES = ( ('Cash','1'), ('Cash/Credit/Debit','3'), ('Credit/Debit','2') )
- payment_types = models.CharField(max_length=2, choices=PAYMENT_CHOICES)
- tax_rate = models.DecimalField(max_digits=4, decimal_places=2)
- suggest_tip_amount = models.BooleanField()
- suggested_tip_percent = models.DecimalField(max_digits=4, decimal_places=2)
- UNITS_CHOICES = ( ('Miles','MI'), ('Kilometers','KM'), )
- distance_units = models.CharField(max_length=2, choices=UNITS_CHOICES)
- delivery_rate_per_distance = models.DecimalField(max_digits=4, decimal_places=2)
- delivery_base_rate = models.DecimalField(max_digits=5, decimal_places=2)
- max_delivery_radius = models.PositiveIntegerField()
- max_deliveries_per_hour = models.PositiveSmallIntegerField()
- delivery_available = models.BooleanField(default=True)
- delivery_minimum_order = models.DecimalField(max_digits=5, decimal_places=2)
- mins_to_fill_order = models.PositiveSmallIntegerField()
- MON_delivery_start = models.TimeField()
- MON_delivery_end = models.TimeField()
- TUE_delivery_start = models.TimeField()
- TUE_delivery_end = models.TimeField()
- WED_delivery_start = models.TimeField()
- WED_delivery_end = models.TimeField()
- THU_delivery_start = models.TimeField()
- THU_delivery_end = models.TimeField()
- FRI_delivery_start = models.TimeField()
- FRI_delivery_end = models.TimeField()
- SAT_delivery_start = models.TimeField()
- SAT_delivery_end = models.TimeField()
- SUN_delivery_start = models.TimeField()
- SUN_delivery_end = models.TimeField()
- MON_operation_start = models.TimeField()
- MON_operation_end = models.TimeField()
- TUE_operation_start = models.TimeField()
- TUE_operation_end = models.TimeField()
- WED_operation_start = models.TimeField()
- WED_operation_end = models.TimeField()
- THU_operation_start = models.TimeField()
- THU_operation_end = models.TimeField()
- FRI_operation_start = models.TimeField()
- FRI_operation_end = models.TimeField()
- SAT_operation_start = models.TimeField()
- SAT_operation_end = models.TimeField()
- SUN_operation_start = models.TimeField()
- SUN_operation_end = models.TimeField()
- google_analytics_script_txt = models.TextField()
- class Admin:
- pass
- def __str__(self):
- return self.parameter
- class Deliverer(models.Model):
- first_name = models.CharField(max_length=50)
- last_name = models.CharField(max_length=50)
- is_active = models.BooleanField(default=True)
- phone_number = models.CharField(max_length=50)
- email_address = models.EmailField()
- start_date = models.DateField(auto_now_add=True)
- total_deliveries = models.PositiveSmallIntegerField()
- last_delivery = models.DateTimeField()
- on_call = models.BooleanField(default=False)
- def __str__(self):
- return self.first_name
- class Admin:
- pass
- class DeliveryAddress(models.Model):
- user = models.ForeignKey(UserProfile,related_name='delivery_addresses')
- is_default = models.BooleanField()
- is_verified = models.BooleanField(default=False)
- location_name = models.CharField(max_length=50)
- ADDRESS_TYPE_CHOICES = ( ('Home','Home'), ('Business','Business'), ('Apartment','Apartment'), ('Other','Other'), )
- address_type = models.CharField(max_length=20,choices=ADDRESS_TYPE_CHOICES)
- address = models.CharField(max_length=50)
- ADDRESS_UNIT_TYPE_CHOICES = ( ('Apt','Apt'), ('Suite','Suite'), ('Floor','Floor'), ('None','None'), )
- address_unit_type = models.CharField(max_length=20,choices=ADDRESS_UNIT_TYPE_CHOICES)
- address2 = models.CharField(max_length=50)
- zip_postal = models.CharField(max_length=10)
- state_province = models.CharField(max_length=50)
- country = models.CharField(max_length=50, default='US')
- est_latitude = models.CharField(max_length=20)
- est_longitude = models.CharField(max_length=20)
- miles_from_store = models.FloatField()
- def __str__(self):
- return self.address
- class Admin:
- pass
- class MenuCategory(models.Model):
- name = models.CharField(max_length=50)
- is_active = models.BooleanField(default=True)
- css_class = models.CharField(max_length=50)
- picture = models.ImageField(upload_to='item_photos/menu/')
- hrs_available_start = models.TimeField(default=datetime.time(0,0,0,0) )
- hrs_available_end = models.TimeField(default=datetime.time(23,59,59,0))
- days_available = models.ManyToManyField('DayOfWeek',related_name='menu_sections')
- tooltip = models.CharField(max_length=200)
- position_index = models.PositiveSmallIntegerField()
- class Meta:
- ordering = ['position_index']
- def __str__(self):
- return self.name
- class Admin:
- pass
- class MenuSection(models.Model):
- name = models.CharField(max_length=50)
- is_active = models.BooleanField(default=True)
- css_class = models.CharField(max_length=50)
- picture = models.ImageField(upload_to='item_photos/menu/')
- hrs_available_start = models.TimeField(default=datetime.time(0,0,0,0) )
- hrs_available_end = models.TimeField(default=datetime.time(23,59,59,0))
- days_available = models.ManyToManyField('DayOfWeek',related_name='menu_sections')
- tooltip = models.CharField(max_length=200)
- position_index = models.PositiveSmallIntegerField()
- menu_category = models.ForeignKey('MenuCategory',related_name='menu_sections')
- class Meta:
- ordering = ['position_index']
- def __str__(self):
- return self.name
- class Admin:
- pass
- class MenuItem(models.Model):
- name = models.CharField(max_length=50)
- is_active = models.BooleanField(default=True)
- css_class = models.CharField(max_length=50)
- description = models.CharField(max_length=500)
- code = models.CharField(max_length=10)
- display_code = models.BooleanField(default=True)
- picture = models.ImageField(upload_to='item_photos/')
- hrs_available_start = models.TimeField(default=datetime.time(0,0,0,0) )
- hrs_available_end = models.TimeField(default=datetime.time(23,59,59,0))
- days_available = models.ManyToManyField('DayOfWeek',related_name='menu_items')
- menu_section = models.ForeignKey('MenuSection',related_name='menu_items')
- tooltip = models.CharField(max_length=200)
- position_index = models.PositiveSmallIntegerField()
- is_taxable = models.BooleanField(default=True)
- nutritional_facts_text = models.TextField()
- nutritional_facts_icon = models.ImageField(upload_to='item_photos/')
- HEALTH_TYPE_CHOICES = ( ('None','None'), ('Low Carb','Carb'), ('Heart','Heart'), ('Low Salt','Salt'), ('Vegetarian','Vegetarian'), ('Sugar Free','Sugar'), ('Vegan','Vegan'))
- health_guide_type = models.CharField(max_length=10,choices=PAYMENT_TYPE_CHOICES)
- base_price = models.DecimalField(max_digits=6, decimal_places=2)
- sale_price = models.DecimalField(max_digits=6, decimal_places=2)
- on_sale = models.BooleanField(default=False)
- show_price_beside_item = models.BooleanField(default=True)
- def valid(target_datetime): #target_datetime is in the reference timezone and is a datetime.datetime object
- is_valid = True
- if self.is_active:
- is_valid = False
- if DAYOFWEEK[target_datetime.weekday()] not in self.days_available.objects.all(): # TBD fix ...?
- is_valid = False
- if target_datetime.time() < self.hrs_available_start or target_datetime.time() > self.hrs_available_end:
- is_valid = False
- return is_valid
- def __str__(self):
- return self.name
- class Meta:
- ordering = ['position_index','name']
- class Admin:
- pass
- class MenuItemOptionGroup(models.Model):
- ##product = models.ManytoManyField(Product,related_name='product_attributes')
- menu_item = models.ForeignKey(MenuItem,related_name='menu_item_option_groups')
- group_text = models.CharField(max_length=50)
- tooltip = models.CharField(max_length=200)
- position_index = models.PositiveSmallIntegerField()
- is_active = models.BooleanField(default=True)
- show_price_beside_options = models.BooleanField(default=True)
- GROUP_TYPE_CHOICES = ( ('Dropdown','Dropdown'), ('Radio','Radio'), ('Checkbox','Checkbox'), ('Multi Dropdown','Multi Dropdown'))
- group_type = CharField(max_length=20,choices=GROUP_TYPE_CHOICES)
- max_selections = models.PositiveSmallIntegerField()
- def __str__(self):
- return self.group_text
- class Admin:
- pass
- class MenuItemOptionValue(models.Model):
- ##product = models.ManytoManyField(Product,related_name='product_attributes')
- name = models.CharField(max_length=50)
- is_default = models.BooleanField(default=False)
- is_active = models.BooleanField(default=True)
- tooltip = models.CharField(max_length=200)
- menu_item_option_group = models.ForeignKey(MenuItemOptionGroup,related_name='menu_item_option_values')
- extra_price = models.DecimalField(max_digits=6, decimal_places=2)
- is_taxable = models.BooleanField(default=True)
- class Admin:
- pass
- def __str__(self):
- return self.name
- class Order(models.Model):
- user = models.ForeignKey(User,related_name='orders')
- deliverer = models.ForeignKey(Deliverer,related_name='orders')
- RETRIEVAL_CHOICES = ( ('Pick Up','Pick Up'), ('Delivery','Delivery'), )
- retrieval_method = models.CharField(max_length=25,choices=RETRIEVAL_CHOICES)
- order_ip = models.IPAddressField()
- conf_code = models.CharField(max_length=15)
- name = models.CharField(max_length=50)
- PLACEMENT_CHOICES = ( ('SMS','SMS'), ('Website','Website'), ('Other','Other') )
- placement_method = models.CharField(max_length=20,choices=PLACEMENT_CHOICES)
- placement_info = models.CharField(max_length=50)
- STATUS_CHOICES = ( ('$CREATE','$CREATE') , ('SUBMITTED','SUBMITTED'), ('IN WORK','IN WORK'), ('BEING DELIVERED','BEING DELIVERED'), ('WAITING FOR PICKUP','WAITING FOR PICKUP'), ('REJECTED','REJECTED'), ('COMPLETED','COMPLETED'), )
- status = models.CharField(max_length=25,choices=STATUS_CHOICES)
- PAYMENT_TYPE_CHOICES = ( ('Credit','Credit'), ('Cash','Cash'), ('Debit','Debit') )
- payment_type = models.CharField(max_length=10,choices=PAYMENT_TYPE_CHOICES)
- sub_total = models.DecimalField(max_digits=6, decimal_places=2)
- delivery_charge = models.DecimalField(max_digits=6, decimal_places=2)
- tax = models.DecimalField(max_digits=6, decimal_places=2)
- tip = models.DecimalField(max_digits=6, decimal_places=2)
- total_amount = models.DecimalField(max_digits=6, decimal_places=2)
- payment_received = models.BooleanField(default=False)
- special_delivery_instructions = models.CharField(max_length=150)
- special_order_instructions = models.CharField(max_length=150)
- invoice_sent = models.BooleanField(default=False)
- invoice_letter_txt = models.TextField(editable=False)
- order_place_time = models.DateTimeField()
- order_request_time = models.DateTimeField()
- ready_time = models.DateTimeField()
- delivered_time = models.DateTimeField()
- coupons = models.ManyToManyField('Coupon',related_name='orders')
- delivery_address = models.ForeignKey(DeliveryAddress,related_name='orders')
- def __str__(self):
- return self.name
- class Admin:
- pass
- class OrderItem(models.Model):
- menu_item = models.ForeignKey('MenuItem',related_name='order_items')
- item_attribute = models.ForeignKey('ItemAttribute',related_name='order_items')
- item_extra = models.ManyToManyField('ItemExtra',related_name='order_items')
- quantity = models.PositiveSmallIntegerField()
- order = models.ForeignKey(Order,related_name='order_items')
- code = models.CharField(max_length=15)
- def __str__(self):
- return self.code
- class Admin:
- pass
- class OrderItemOptionValue(models.Model):
- order_item = models.ForeignKey('OrderItem',related_name='order_item_option_values')
- value = models.CharField(max_length=150)
- code = models.CharField(max_length=15)
- #TBD ? use foreign key or just char field???
- menu_item_option_group = models.ForeignKey(MenuItemOptionGroup,related_name='menu_item_option_values')
- def __str__(self):
- return self.code
- class Admin:
- pass
- class DayOfWeek(models.Model):
- DAY_CHOICES = ( ('M','M'), ('T','T'), ('W','W'), ('R','R'), ('F','F'), ('S','S'), ('U','U'),)
- name = models.CharField(max_length=1, choices=DAY_CHOICES, unique=True)
- class Admin:
- pass
- def __str__(self):
- return self.name
- class Coupon(models.Model):
- code = models.CharField(max_length=30)
- is_active = models.BooleanField(default=True)
- description = models.CharField(max_length=75)
- expiration_date = models.DateTimeField()
- min_valued_req = models.DecimalField(max_digits=8, decimal_places=2)
- hrs_available_start = models.TimeField(default=datetime.time(0,0,0,0) )
- hrs_available_end = models.TimeField(default=datetime.time(23,59,59,9999))
- days_available = models.ManyToManyField(DayOfWeek,related_name='coupons')
- can_combine = models.BooleanField(default=True)
- item = models.ManyToManyField(MenuItem,related_name='coupons')
- num_orders_before_expiration = models.PositiveSmallIntegerField(default=0)
- usage_count = models.PositiveIntegerField(editable=False)
- def valid(target_datetime): #target_datetime is in the reference timezone and is a datetime.datetime object
- is_valid = True
- if self.num_orders_before_expiration > 0 and len(self.usage_count) >= self.num_orders_before_expiration:
- is_valid = False
- if self.is_active:
- is_valid = False
- if self.expiration_date > target_datetime:
- is_valid = False
- if DAYOFWEEK[target_datetime.weekday()] not in self.days_available.objects.all(): # TBD fix ...?
- is_valid = False
- if target_datetime.time() < self.hrs_available_start or target_datetime.time() > self.hrs_available_end:
- is_valid = False
- return is_valid
- class Admin:
- pass
- def __str__(self):
- return self.code
- class Reservation(models.Model):
- user = models.ForeignKey(UserProfile,related_name='reservations')
- special_requests = models.CharField(max_length=150)
- number_seats = models.PositiveSmallIntegerField()
- when = models.DateTimeField()
- placed_on = models.DateTimeField(auto_now_add=True)
- STATUS_CHOICES = ( ('SUBMITTED','SUBMITTED'), ('APPROVED','APPROVED'), ('REJECTED','REJECTED'), ('COMPLETED','COMPLETED'), ('AGED','AGED'), )
- status = models.CharField(max_length=25,choices=STATUS_CHOICES)
- reservation_code = models.CharField(max_length=10)
- PLACEMENT_CHOICES = ( ('SMS','SMS'), ('Website','Website'), ('Other','Other') )
- placement_method = models.CharField(max_length=20,choices=PLACEMENT_CHOICES)
- class Admin:
- pass
- def __str__(self):
- return self.reservation_code
- class CommunicationLogging(models.Model):
- DIRECTION_CHOICES = ( ('IN','IN'),('OUT','OUT'), )
- direction = models.CharField(max_length=3, choices=DIRECTION_CHOICES, editable=False)
- comm_type = models.CharField(max_length=10, editable=False)
- user = models.ForeignKey(UserProfile,related_name='communication_logging')
- description = models.CharField(max_length=150, editable=False)
- cost = models.DecimalField(max_digits=8, decimal_places=3,default=Decimal('0.00'))
- msg_txt = models.TextField(editable=False)
- class Admin:
- pass
- def __str__(self):
- return self.msg_txt
- class Promotion(models.Model):
- name = models.CharField(max_length=100)
- user_profile = models.ManyToManyField(UserProfile,related_name='promotions')
- date_sent = models.DateTimeField()
- promotion_text = models.TextField(editable=False)
- def __str__(self):
- return self.name
- class Admin:
- pass
Add Comment
Please, Sign In to add comment