Subversion Repositories SmartDukaan

Rev

Rev 759 | Rev 963 | 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, Binary
from elixir.relationships import OneToMany, ManyToOne
import datetime
import elixir

class BestSellers(Entity):
    manufacturer_name = Field(String(100), primary_key=True)
    model_number = Field(String(50), primary_key=True)
    color = Field(String(20), primary_key=True)
    rank = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class Warehouse(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    displayName = Field(String(50))
    location = Field(String(200))
    status = Field(Integer)
    addedOn = Field(DateTime)
    lastCheckedOn = Field(DateTime)
    tinNumber = Field(String(50))
    pincode = Field(String(10))
    vendorString = Field(String(50))
    inventory = OneToMany('CurrentInventorySnapshot')
    inventoryHistory = OneToMany('ItemInventoryHistory')
    logisticsLocation = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    def __repr__(self):
        return "<warehouse>%s</warehouse>" %(self.location)

    @property
    def all_items(self):
        items = []
        for ci in self.inventory:
            items.append(ci.item)
        return items 

class EntityIDGenerator(Entity):
    id=Field(Integer, primary_key=True)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class Item(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    manufacturer_name = Field(String(100))
    model_number = Field(String(50))
    model_name = Field(String(50))
    color = Field(String(20))
    category = Field(Integer)
    comments = Field(String(200))
    catalog_item_id = Field(Integer)
    vendor_item_id = Field(String(50))
    feature_id = Field(Integer)
    feature_description = Field(String(200))
    mrp = Field(Float)
    mop = Field(Float)
    sellingPrice = Field(Float)
    dealerPrice = Field(Float)
    transfer_price = Field(Float)
    weight = Field(Float)
    addedOn = Field(DateTime)
    updatedOn = Field(DateTime)
    startDate = Field(DateTime)
    retireDate = Field(DateTime)
    status = Field(Integer)
    bestDealText = Field(String(100))
    bestDealValue = Field(Float)
    bestSellingRank = Field(Integer)
    currentInventory = OneToMany('CurrentInventorySnapshot')
    inventoryHistory = OneToMany('ItemInventoryHistory')
    iteminfo = OneToMany("ItemInfo")
    statusChangeLog = OneToMany("ItemChangeLog")
    hotspotCategory = Field(String(50))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    def __repr__(self):
        return "<Item>%d</item>" % (self.id)
    
    @property
    def get_total_inventory(self):
        if self.currentInventory:
            i = 0
            for entry in self.currentInventory:
                i += entry.availability
            return i
        
        else:
            return 0;
    
    @property
    def get_all_warehouses(self):
        warehouses = []
        for ci in self.currentInventory:
            warehouses.append(ci.warehouse)
        return warehouses
 
class ItemInfo(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    key = Field(String(30))
    value = Field(String(100))
    item = ManyToOne("Item")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    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.now())
    item = ManyToOne("Item", primary_key=True)
    warehouse = ManyToOne("Warehouse", primary_key=True)
    availibility = Field(Integer)
    reserved = Field(Integer)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    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)

class ItemInventoryHistory(Entity):
    id = Field(Integer, primary_key=True, autoincrement = True)    
    timestamp = Field(DateTime, default=datetime.datetime.now())
    availibility = Field(Integer)
    item = ManyToOne("Item")
    warehouse = ManyToOne("Warehouse")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    def __repr__(self):
        pass

class ItemChangeLog(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    old_status = Field(Integer)
    new_status = Field(Integer)
    timestamp = Field(DateTime, default=datetime.datetime.now())
    item = ManyToOne("Item")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    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)    

class Category(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    object = Field(Binary)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
def initialize():
    #metadata.bind = "sqlite:///inventory-new.sqlite" #need to read it from configserver.
    metadata.bind = 'mysql://root:shop2020@localhost/catalog'
    metadata.bind.echo = True
    setup_all(True)

if __name__=="__main__":
    initialize()