Subversion Repositories SmartDukaan

Rev

Rev 2251 | Rev 2841 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
94 ashish 1
'''
2
Created on 22-Mar-2010
3
 
4
@author: ashish
5
'''
6
from elixir import *
7
from elixir.entity import Entity
8
from elixir.fields import Field
635 rajveer 9
from sqlalchemy.types import Integer, Binary
1122 chandransh 10
from sqlalchemy import create_engine
94 ashish 11
from elixir.relationships import OneToMany, ManyToOne
12
import datetime
746 rajveer 13
import elixir
94 ashish 14
 
1308 chandransh 15
class Vendor(Entity):
16
    id = Field(Integer, primary_key=True, autoincrement=True)
17
    name = Field(String(50))
18
    warehouses = OneToMany('Warehouse')
19
    using_options(shortnames=True)
20
    using_table_options(mysql_engine="InnoDB")
21
 
94 ashish 22
class Warehouse(Entity):
122 ashish 23
    id = Field(Integer, primary_key=True, autoincrement=True)
759 chandransh 24
    displayName = Field(String(50))
483 rajveer 25
    location = Field(String(200))
103 ashish 26
    status = Field(Integer)
122 ashish 27
    addedOn = Field(DateTime)
483 rajveer 28
    lastCheckedOn = Field(DateTime)
29
    tinNumber = Field(String(50))
30
    pincode = Field(String(10))
31
    vendorString = Field(String(50))
94 ashish 32
    inventory = OneToMany('CurrentInventorySnapshot')
33
    inventoryHistory = OneToMany('ItemInventoryHistory')
643 chandransh 34
    logisticsLocation = Field(Integer)
1308 chandransh 35
    vendor = ManyToOne('Vendor')
746 rajveer 36
    using_options(shortnames=True)
37
    using_table_options(mysql_engine="InnoDB")
94 ashish 38
 
39
    def __repr__(self):
40
        return "<warehouse>%s</warehouse>" %(self.location)
41
 
122 ashish 42
    @property
43
    def all_items(self):
44
        items = []
45
        for ci in self.inventory:
46
            items.append(ci.item)
47
        return items 
626 chandransh 48
 
49
class EntityIDGenerator(Entity):
50
    id=Field(Integer, primary_key=True)
51
    using_options(shortnames=True)
746 rajveer 52
    using_table_options(mysql_engine="InnoDB")
122 ashish 53
 
94 ashish 54
class Item(Entity):
122 ashish 55
    id = Field(Integer, primary_key=True, autoincrement=True)
963 chandransh 56
    product_group = Field(String(100))
57
    brand = Field(String(100))
483 rajveer 58
    model_number = Field(String(50))
59
    model_name = Field(String(50))
609 chandransh 60
    color = Field(String(20))
626 chandransh 61
    category = Field(Integer)
483 rajveer 62
    comments = Field(String(200))
122 ashish 63
    catalog_item_id = Field(Integer)
64
    feature_id = Field(Integer)
65
    feature_description = Field(String(200))
483 rajveer 66
    mrp = Field(Float)
67
    mop = Field(Float)
68
    sellingPrice = Field(Float)
609 chandransh 69
    dealerPrice = Field(Float)
724 chandransh 70
    transfer_price = Field(Float)
483 rajveer 71
    weight = Field(Float)
122 ashish 72
    addedOn = Field(DateTime)
609 chandransh 73
    updatedOn = Field(DateTime)
122 ashish 74
    startDate = Field(DateTime)
75
    retireDate = Field(DateTime)
483 rajveer 76
    status = Field(Integer)
2035 rajveer 77
    status_description = Field(String(100))
609 chandransh 78
    bestDealText = Field(String(100))
630 chandransh 79
    bestDealValue = Field(Float)
621 chandransh 80
    bestSellingRank = Field(Integer)
94 ashish 81
    currentInventory = OneToMany('CurrentInventorySnapshot')
82
    inventoryHistory = OneToMany('ItemInventoryHistory')
103 ashish 83
    iteminfo = OneToMany("ItemInfo")
84
    statusChangeLog = OneToMany("ItemChangeLog")
724 chandransh 85
    hotspotCategory = Field(String(50))
1416 chandransh 86
    preferredWarehouse = Field(String(50))
1910 varun.gupt 87
    defaultForEntity = Field(Boolean)
2251 ankur.sing 88
    risky = Field(Boolean)
2809 rajveer 89
    similarityIndex = Field(Integer)
746 rajveer 90
    using_options(shortnames=True)
91
    using_table_options(mysql_engine="InnoDB")
103 ashish 92
 
94 ashish 93
    def __repr__(self):
122 ashish 94
        return "<Item>%d</item>" % (self.id)
94 ashish 95
 
122 ashish 96
    @property
94 ashish 97
    def get_total_inventory(self):
98
        if self.currentInventory:
99
            i = 0
100
            for entry in self.currentInventory:
101
                i += entry.availability
102
            return i
103
 
104
        else:
105
            return 0;
103 ashish 106
 
122 ashish 107
    @property
94 ashish 108
    def get_all_warehouses(self):
1308 chandransh 109
        return [ci.warehouse for ci in self.currentInventory]
110
 
111
class VendorItemMapping(Entity):
112
    vendor = ManyToOne('Vendor', primary_key=True)
113
    item_key = Field(String(200), primary_key=True)
114
    item = ManyToOne('Item')
1352 chandransh 115
    vendor_category = Field(String(50))
1308 chandransh 116
    using_options(shortnames=True)
117
    using_table_options(mysql_engine="InnoDB")
118
 
119
class VendorItemPricing(Entity):
120
    vendor = ManyToOne('Vendor', primary_key=True)
121
    item = ManyToOne('Item', primary_key=True)
122
    mop = Field(Float)
123
    dealerPrice = Field(Float)
124
    transfer_price = Field(Float)
125
    using_options(shortnames=True)
126
    using_table_options(mysql_engine="InnoDB")
127
 
103 ashish 128
class ItemInfo(Entity):
122 ashish 129
    id = Field(Integer, primary_key=True, autoincrement=True)
103 ashish 130
    key = Field(String(30))
131
    value = Field(String(100))
132
    item = ManyToOne("Item")
746 rajveer 133
    using_options(shortnames=True)
134
    using_table_options(mysql_engine="InnoDB")
103 ashish 135
 
136
    def __repr__(self):
137
        return "<ItemInfo><key>%s</key><value>%s</value></ItemInfo>" % (self.key, self.value)
115 ashish 138
 
94 ashish 139
 
140
class CurrentInventorySnapshot(Entity):
115 ashish 141
    #id = Field(Integer, primary_key=True)
483 rajveer 142
    #checkedOn = Field(DateTime, default=datetime.datetime.now())
870 chandransh 143
    item = ManyToOne("Item", primary_key=True)
144
    warehouse = ManyToOne("Warehouse", primary_key=True)
94 ashish 145
    availibility = Field(Integer)
870 chandransh 146
    reserved = Field(Integer)
746 rajveer 147
    using_options(shortnames=True)
148
    using_table_options(mysql_engine="InnoDB")
94 ashish 149
 
150
    def __repr__(self):
151
        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)
152
 
153
class ItemInventoryHistory(Entity):
122 ashish 154
    id = Field(Integer, primary_key=True, autoincrement = True)    
94 ashish 155
    timestamp = Field(DateTime, default=datetime.datetime.now())
156
    availibility = Field(Integer)
157
    item = ManyToOne("Item")
158
    warehouse = ManyToOne("Warehouse")
746 rajveer 159
    using_options(shortnames=True)
160
    using_table_options(mysql_engine="InnoDB")
94 ashish 161
 
162
    def __repr__(self):
163
        pass
103 ashish 164
 
165
class ItemChangeLog(Entity):
122 ashish 166
    id = Field(Integer, primary_key=True, autoincrement=True)
103 ashish 167
    old_status = Field(Integer)
168
    new_status = Field(Integer)
1308 chandransh 169
    timestamp = Field(DateTime)
103 ashish 170
    item = ManyToOne("Item")
746 rajveer 171
    using_options(shortnames=True)
172
    using_table_options(mysql_engine="InnoDB")
94 ashish 173
 
103 ashish 174
    def __repr__(self):
175
        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)    
94 ashish 176
 
635 rajveer 177
class Category(Entity):
1970 rajveer 178
    id = Field(Integer, primary_key=True, autoincrement=False)
179
    label = Field(String(50))
180
    description = Field(String(200))
181
    parent_category_id = Field(Integer)
746 rajveer 182
    using_options(shortnames=True)
183
    using_table_options(mysql_engine="InnoDB")
1970 rajveer 184
 
746 rajveer 185
 
1249 chandransh 186
def initialize(dbname='catalog'):
746 rajveer 187
    #metadata.bind = "sqlite:///inventory-new.sqlite" #need to read it from configserver.
1122 chandransh 188
    #metadata.bind = 'mysql://root:shop2020@localhost/catalog'
1249 chandransh 189
    engine = create_engine('mysql://root:shop2020@localhost/' + dbname, pool_recycle=7200)
1122 chandransh 190
    metadata.bind = engine
94 ashish 191
    metadata.bind.echo = True
192
    setup_all(True)
115 ashish 193
 
194
if __name__=="__main__":
195
    initialize()