Subversion Repositories SmartDukaan

Rev

Rev 6511 | Rev 6777 | 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 metadata, setup_all
from elixir.entity import Entity
from elixir.fields import Field
from elixir.options import using_options, using_table_options
from elixir.relationships import OneToMany, ManyToOne
from sqlalchemy import create_engine
from sqlalchemy.types import Integer, String, DateTime, Float, Boolean, Text, Enum
import datetime
import elixir

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)
    product_group = Field(String(100))
    brand = Field(String(100), default='', server_default='')
    model_number = Field(String(50), default='', server_default='')
    model_name = Field(String(100), default='', server_default='')
    color = Field(String(20), default='', server_default='')
    category = Field(Integer, default=0, server_default="0")
    comments = Field(String(200))
    catalog_item_id = Field(Integer)
    feature_id = Field(Integer)
    feature_description = Field(String(200))
    mrp = Field(Float)
    sellingPrice = Field(Float)
    weight = Field(Float)
    addedOn = Field(DateTime)
    updatedOn = Field(DateTime)
    startDate = Field(DateTime)
    retireDate = Field(DateTime)
    comingSoonStartDate = Field(DateTime)
    expectedArrivalDate = Field(DateTime)
    status = Field(Integer)
    status_description = Field(String(100))
    bestDealText = Field(String(100))
    bestDealValue = Field(Float)
    bestSellingRank = Field(Integer)
    statusChangeLog = OneToMany("ItemChangeLog")
    defaultForEntity = Field(Boolean)
    risky = Field(Boolean)
    expectedDelay = Field(Integer)
    warranty_period = Field(Integer)
    isWarehousePreferenceSticky = Field(Boolean)
    preferredVendor = Field(Integer)
    type = Field(Enum('SERIALIZED', 'NON_SERIALIZED'), default = 'NON_SERIALIZED', server_default='NON_SERIALIZED')
    hasItemNo = Field(Boolean)
    clearance = Field(Boolean)
    vatPercentage = Field(Float)
    showSellingPrice = Field(Boolean)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
    def __repr__(self):
        return "<Item>%d</item>" % (self.id)

class ItemChangeLog(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    old_status = Field(Integer)
    new_status = Field(Integer)
    timestamp = Field(DateTime)
    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=False)
    label = Field(String(50))
    description = Field(String(200))
    parent_category_id = Field(Integer)
    display_name = Field(String(50))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class SimilarItems(Entity):
    item = ManyToOne('Item', primary_key=True)
    catalog_item_id = Field(Integer, primary_key=True, autoincrement=False)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class ProductNotification(Entity):
    item = ManyToOne('Item', primary_key=True)
    email = Field(String(100), primary_key=True, autoincrement=False)
    addedOn = Field(DateTime, primary_key=True, autoincrement=False) 
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class Source(Entity):
    id = Field(Integer, primary_key=True, autoincrement=True)
    name = Field(String(50))
    identifier = Field(String(100))
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class SourceItemPricing(Entity):
    source = ManyToOne('Source', primary_key=True)
    item = ManyToOne('Item', primary_key=True)
    mrp = Field(Float)
    sellingPrice = Field(Float)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
    
class AuthorizationLog(Entity):
    id = Field(Integer, primary_key=True, autoincrement = True)    
    timestamp = Field(DateTime, default=datetime.datetime.now())
    item = ManyToOne('Item')
    username = Field(String(30))
    reason = Field(Text)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class VoucherItemMapping(Entity):
    voucherType = Field(Integer, primary_key=True)
    item = ManyToOne('Item', primary_key=True)
    amount = Field(Integer, default=0, server_default="0")
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class CategoryVatMaster(Entity):
    categoryId = Field(Integer, primary_key=True)
    minVal = Field(Integer, primary_key=True)
    maxVal = Field(Integer, primary_key=True)
    vatPercent = Field(Float)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class OOSTracker(Entity):
    itemId = Field(Integer, primary_key=True)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")

class EntityTag(Entity):
    tag = Field(String(100),primary_key=True)
    entityId = Field(Integer, primary_key=True, autoincrement=False)
    using_options(shortnames=True)
    using_table_options(mysql_engine="InnoDB")
        
def initialize(dbname='catalog', db_hostname="localhost"):
    #metadata.bind = "sqlite:///inventory-new.sqlite" #need to read it from configserver.
    #metadata.bind = 'mysql://root:shop2020@localhost/catalog'
    cengine = create_engine('mysql://root:shop2020@' + db_hostname + '/' + dbname, pool_recycle=7200)
    metadata.bind = cengine
    metadata.bind.echo = True
    setup_all(True)

if __name__=="__main__":
    initialize()