Subversion Repositories SmartDukaan

Rev

Rev 94 | Rev 103 | 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 Entity
from elixir.fields import Field
from sqlalchemy.types import Integer
from elixir.relationships import OneToMany, ManyToOne
import datetime


class Category(Entity):
    '''
    This class represents the catalog. 
    '''
    id = Field(Integer, primary_key=True)
    name = Field(String(30))
    isRoot = Field(Integer)
    addedOn = Field(DateTime)
    items = OneToMany('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))
    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))
    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))
    currentInventory = OneToMany('CurrentInventorySnapshot')
    inventoryHistory = OneToMany('ItemInventoryHistory')
    category = ManyToOne("Category")
    def __repr__(self):
        return "<Item>%s</item>" % (self.name)
    
    def get_total_inventory(self):
        if self.currentInventory:
            i = 0
            for entry in self.currentInventory:
                i += entry.availability
            return i
        
        else:
            return 0;
        
    def get_all_warehouses(self):
        warehouses = []
        for warehouse in self.currentInventory.warehouse:
            warehouses.append(warehouse)
        return warehouses
    

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 ItemAttribs(Entity):
    id = Field(Integer, primary_key=True)
    def __repr__(self):
        pass
    

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):
        pass
    

def initialize():
    metadata.bind = "sqlite:///catalog.sqlite"
    metadata.bind.echo = True
    
    setup_all(True)