Rev 100 | Rev 115 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on 22-Mar-2010@author: ashish'''from elixir import *from elixir.entity import Entityfrom elixir.fields import Fieldfrom sqlalchemy.types import Integerfrom elixir.relationships import OneToMany, ManyToOneimport datetimeclass Category(Entity):'''This class represents the catalog.'''id = Field(Integer, primary_key=True)name = Field(String(30))isRoot = Field(Integer)addedOn = Field(DateTime)status = Field(Integer)items = ManyToMany('Item')children = OneToMany('Category', inverse='parent')parent = ManyToOne('Category', inverse='children')def __repr__(self):return "<id>%id </id>"%(self.id)class Vendor(Entity):id = Field(Integer, primary_key=True)name = Field(String(30))status = Field(Integer)addedOn = Field(datetime)warehouses = ManyToMany('Warehouse')def __repr__(self):return "<Vendor>%s</Vendor>" %(self.name)class Warehouse(Entity):id = Field(Integer, primary_key=True)location = Field(String(20))status = Field(Integer)addedOn = Field(datetime)vendors = ManyToMany('Vendor')inventory = OneToMany('CurrentInventorySnapshot')inventoryHistory = OneToMany('ItemInventoryHistory')def __repr__(self):return "<warehouse>%s</warehouse>" %(self.location)class Item(Entity):id = Field(Integer, primary_key=True)name = Field(String(20))price = Field(Float)addedOn = Field(datetime)status = Field(Integer)startDate = Field(datetime)retireDate = Field(datetime)currentInventory = OneToMany('CurrentInventorySnapshot')inventoryHistory = OneToMany('ItemInventoryHistory')category = ManyToMany("Category")iteminfo = OneToMany("ItemInfo")statusChangeLog = OneToMany("ItemChangeLog")def __repr__(self):return "<Item>%s</item>" % (self.name)@propertydef get_total_inventory(self):if self.currentInventory:i = 0for entry in self.currentInventory:i += entry.availabilityreturn ielse:return 0;@propertydef get_all_warehouses(self):warehouses = []for warehouse in self.currentInventory.warehouse:warehouses.append(warehouse)return warehousesclass ItemInfo(Entity):key = Field(String(30))value = Field(String(100))item = ManyToOne("Item")def __repr__(self):return "<ItemInfo><key>%s</key><value>%s</value></ItemInfo>" % (self.key, self.value)class CurrentInventorySnapshot(Entity):id = Field(Integer, primary_key=True)checkedOn = Field(DateTime, default=datetime.datetime)availibility = Field(Integer)item = ManyToOne("Item")warehouse = ManyToOne("Warehouse")def __repr__(self):return "<current inventory><availability> %s </availability><time>%s</time><item>%s</item><warehouse>%s</warehouse></current inventory>" %(self.availibility, self.checkedOn, self.item, self.warehouse)#===============================================================================# This is just a placeholder, will be using naveen's code for this.#===============================================================================class ItemInventoryHistory(Entity):id = Field(Integer, primary_key=True)timestamp = Field(DateTime, default=datetime.datetime.now())availibility = Field(Integer)item = ManyToOne("Item")warehouse = ManyToOne("Warehouse")def __repr__(self):passclass ItemChangeLog(Entity):id = Field(Integer, primary_key=True)old_status = Field(Integer)new_status = Field(Integer)timestamp = Field(datetime)item = ManyToOne("Item")def __repr__(self):return "<Log><id>%d</id><item>%d</item><old_status>%d</old_status><new_status>%d</new_status></Log>" %(self.id,self.item.id, self.old_status, self.new_status)def initialize():metadata.bind = "sqlite:///catalog.sqlite"metadata.bind.echo = Truesetup_all(True)