Subversion Repositories SmartDukaan

Rev

Rev 4979 | Rev 5135 | 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
'''
4873 mandeep.dh 6
from elixir import metadata, setup_all
94 ashish 7
from elixir.entity import Entity
8
from elixir.fields import Field
4873 mandeep.dh 9
from elixir.options import using_options, using_table_options
10
from elixir.relationships import OneToMany, ManyToOne, ManyToMany
11
from sqlalchemy import create_engine
4897 rajveer 12
from sqlalchemy.types import Integer, String, DateTime, Float, Boolean, Text,\
5110 mandeep.dh 13
    Date, Enum
4873 mandeep.dh 14
import datetime
15
import elixir
94 ashish 16
 
1308 chandransh 17
class Vendor(Entity):
18
    id = Field(Integer, primary_key=True, autoincrement=True)
19
    name = Field(String(50))
5110 mandeep.dh 20
    warehouses = OneToMany('Warehouse')
1308 chandransh 21
    using_options(shortnames=True)
22
    using_table_options(mysql_engine="InnoDB")
23
 
94 ashish 24
class Warehouse(Entity):
122 ashish 25
    id = Field(Integer, primary_key=True, autoincrement=True)
759 chandransh 26
    displayName = Field(String(50))
483 rajveer 27
    location = Field(String(200))
122 ashish 28
    addedOn = Field(DateTime)
483 rajveer 29
    lastCheckedOn = Field(DateTime)
30
    tinNumber = Field(String(50))
31
    pincode = Field(String(10))
32
    vendorString = Field(String(50))
5110 mandeep.dh 33
    badInventory = OneToMany('BadInventorySnapshot')
94 ashish 34
    inventory = OneToMany('CurrentInventorySnapshot')
35
    inventoryHistory = OneToMany('ItemInventoryHistory')
643 chandransh 36
    logisticsLocation = Field(Integer)
5110 mandeep.dh 37
    vendor = ManyToOne('Vendor')
2841 chandransh 38
    billingType = Field(Integer)
5110 mandeep.dh 39
    inventoryType = Field(Enum('GOOD', 'BAD', 'VIRTUAL'))
40
    warehouseType = Field(Enum('OURS', 'THIRD_PARTY'))
41
    shippingWarehouseId = Field(Integer)
42
    billingWarehouseId = Field(Integer)
43
    transferDelayInHours = Field(Integer)
44
    isAvailabilityMonitored = Field(Boolean)
746 rajveer 45
    using_options(shortnames=True)
46
    using_table_options(mysql_engine="InnoDB")
94 ashish 47
 
48
    def __repr__(self):
49
        return "<warehouse>%s</warehouse>" %(self.location)
50
 
122 ashish 51
    @property
52
    def all_items(self):
53
        items = []
54
        for ci in self.inventory:
55
            items.append(ci.item)
56
        return items 
626 chandransh 57
 
58
class EntityIDGenerator(Entity):
59
    id=Field(Integer, primary_key=True)
60
    using_options(shortnames=True)
746 rajveer 61
    using_table_options(mysql_engine="InnoDB")
122 ashish 62
 
94 ashish 63
class Item(Entity):
122 ashish 64
    id = Field(Integer, primary_key=True, autoincrement=True)
963 chandransh 65
    product_group = Field(String(100))
4917 phani.kuma 66
    brand = Field(String(100), default='', server_default='')
67
    model_number = Field(String(50), default='', server_default='')
68
    model_name = Field(String(100), default='', server_default='')
69
    color = Field(String(20), default='', server_default='')
70
    category = Field(Integer, default=0, server_default="0")
483 rajveer 71
    comments = Field(String(200))
122 ashish 72
    catalog_item_id = Field(Integer)
73
    feature_id = Field(Integer)
74
    feature_description = Field(String(200))
483 rajveer 75
    mrp = Field(Float)
76
    sellingPrice = Field(Float)
77
    weight = Field(Float)
122 ashish 78
    addedOn = Field(DateTime)
609 chandransh 79
    updatedOn = Field(DateTime)
122 ashish 80
    startDate = Field(DateTime)
81
    retireDate = Field(DateTime)
483 rajveer 82
    status = Field(Integer)
2035 rajveer 83
    status_description = Field(String(100))
609 chandransh 84
    bestDealText = Field(String(100))
630 chandransh 85
    bestDealValue = Field(Float)
621 chandransh 86
    bestSellingRank = Field(Integer)
94 ashish 87
    currentInventory = OneToMany('CurrentInventorySnapshot')
88
    inventoryHistory = OneToMany('ItemInventoryHistory')
103 ashish 89
    iteminfo = OneToMany("ItemInfo")
90
    statusChangeLog = OneToMany("ItemChangeLog")
4762 phani.kuma 91
    preferredWarehouse = Field(Integer)
1910 varun.gupt 92
    defaultForEntity = Field(Boolean)
2251 ankur.sing 93
    risky = Field(Boolean)
3355 chandransh 94
    expectedDelay = Field(Integer)
4295 varun.gupt 95
    warranty_period = Field(Integer)
4762 phani.kuma 96
    defaultWarehouse = Field(Integer)
4406 anupam.sin 97
    isWarehousePreferenceSticky = Field(Boolean)
4506 phani.kuma 98
    preferredVendor = Field(Integer)
5110 mandeep.dh 99
    type = Field(Enum('SERIALIZED', 'NON_SERIALIZED'))
746 rajveer 100
    using_options(shortnames=True)
101
    using_table_options(mysql_engine="InnoDB")
103 ashish 102
 
94 ashish 103
    def __repr__(self):
122 ashish 104
        return "<Item>%d</item>" % (self.id)
94 ashish 105
 
122 ashish 106
    @property
94 ashish 107
    def get_total_inventory(self):
108
        if self.currentInventory:
109
            i = 0
110
            for entry in self.currentInventory:
111
                i += entry.availability
112
            return i
113
 
114
        else:
115
            return 0;
103 ashish 116
 
122 ashish 117
    @property
94 ashish 118
    def get_all_warehouses(self):
1308 chandransh 119
        return [ci.warehouse for ci in self.currentInventory]
120
 
121
class VendorItemMapping(Entity):
122
    vendor = ManyToOne('Vendor', primary_key=True)
123
    item_key = Field(String(200), primary_key=True)
124
    item = ManyToOne('Item')
125
    using_options(shortnames=True)
126
    using_table_options(mysql_engine="InnoDB")
127
 
128
class VendorItemPricing(Entity):
129
    vendor = ManyToOne('Vendor', primary_key=True)
130
    item = ManyToOne('Item', primary_key=True)
131
    mop = Field(Float)
132
    dealerPrice = Field(Float)
133
    transfer_price = Field(Float)
134
    using_options(shortnames=True)
135
    using_table_options(mysql_engine="InnoDB")
136
 
4897 rajveer 137
class VendorItemProcurementDelay(Entity):
138
    vendor = ManyToOne('Vendor', primary_key=True)
139
    item = ManyToOne('Item', primary_key=True)
140
    procurementDelay = Field(Integer)
141
    using_options(shortnames=True)
142
    using_table_options(mysql_engine="InnoDB")
143
 
4979 rajveer 144
class VendorHolidays(Entity):
145
    vendor = ManyToOne('Vendor', primary_key=True)
146
    holidayType = Field(Integer, primary_key=True, autoincrement=False)
147
    holidayValue = Field(Integer, primary_key=True, autoincrement=False)
148
    occasion = Field(String(100))
149
    using_options(shortnames=True)
150
    using_table_options(mysql_engine="InnoDB")
4897 rajveer 151
 
103 ashish 152
class ItemInfo(Entity):
122 ashish 153
    id = Field(Integer, primary_key=True, autoincrement=True)
103 ashish 154
    key = Field(String(30))
155
    value = Field(String(100))
156
    item = ManyToOne("Item")
746 rajveer 157
    using_options(shortnames=True)
158
    using_table_options(mysql_engine="InnoDB")
103 ashish 159
 
160
    def __repr__(self):
161
        return "<ItemInfo><key>%s</key><value>%s</value></ItemInfo>" % (self.key, self.value)
115 ashish 162
 
94 ashish 163
 
164
class CurrentInventorySnapshot(Entity):
870 chandransh 165
    item = ManyToOne("Item", primary_key=True)
166
    warehouse = ManyToOne("Warehouse", primary_key=True)
94 ashish 167
    availibility = Field(Integer)
870 chandransh 168
    reserved = Field(Integer)
746 rajveer 169
    using_options(shortnames=True)
170
    using_table_options(mysql_engine="InnoDB")
94 ashish 171
 
172
    def __repr__(self):
173
        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)
174
 
5110 mandeep.dh 175
class BadInventorySnapshot(Entity):
176
    item = ManyToOne("Item", primary_key=True)
177
    warehouse = ManyToOne("Warehouse", primary_key=True)
178
    availability = Field(Integer)
179
    using_options(shortnames=True)
180
    using_table_options(mysql_engine="InnoDB")
181
 
94 ashish 182
class ItemInventoryHistory(Entity):
122 ashish 183
    id = Field(Integer, primary_key=True, autoincrement = True)    
94 ashish 184
    timestamp = Field(DateTime, default=datetime.datetime.now())
185
    availibility = Field(Integer)
186
    item = ManyToOne("Item")
187
    warehouse = ManyToOne("Warehouse")
746 rajveer 188
    using_options(shortnames=True)
189
    using_table_options(mysql_engine="InnoDB")
94 ashish 190
 
191
    def __repr__(self):
192
        pass
103 ashish 193
 
194
class ItemChangeLog(Entity):
122 ashish 195
    id = Field(Integer, primary_key=True, autoincrement=True)
103 ashish 196
    old_status = Field(Integer)
197
    new_status = Field(Integer)
1308 chandransh 198
    timestamp = Field(DateTime)
103 ashish 199
    item = ManyToOne("Item")
746 rajveer 200
    using_options(shortnames=True)
201
    using_table_options(mysql_engine="InnoDB")
94 ashish 202
 
103 ashish 203
    def __repr__(self):
204
        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 205
 
635 rajveer 206
class Category(Entity):
1970 rajveer 207
    id = Field(Integer, primary_key=True, autoincrement=False)
208
    label = Field(String(50))
209
    description = Field(String(200))
210
    parent_category_id = Field(Integer)
4762 phani.kuma 211
    display_name = Field(String(50))
746 rajveer 212
    using_options(shortnames=True)
213
    using_table_options(mysql_engine="InnoDB")
1970 rajveer 214
 
3008 rajveer 215
class SimilarItems(Entity):
216
    item = ManyToOne('Item', primary_key=True)
217
    catalog_item_id = Field(Integer, primary_key=True, autoincrement=False)
218
    using_options(shortnames=True)
219
    using_table_options(mysql_engine="InnoDB")
220
 
3079 rajveer 221
class ProductNotification(Entity):
222
    item = ManyToOne('Item', primary_key=True)
223
    email = Field(String(100), primary_key=True, autoincrement=False)
224
    addedOn = Field(DateTime, primary_key=True, autoincrement=False) 
225
    using_options(shortnames=True)
226
    using_table_options(mysql_engine="InnoDB")
3557 rajveer 227
 
228
class Source(Entity):
229
    id = Field(Integer, primary_key=True, autoincrement=True)
230
    name = Field(String(50))
231
    identifier = Field(String(100))
232
    using_options(shortnames=True)
233
    using_table_options(mysql_engine="InnoDB")
234
 
235
class SourceItemPricing(Entity):
236
    source = ManyToOne('Source', primary_key=True)
237
    item = ManyToOne('Item', primary_key=True)
238
    mrp = Field(Float)
239
    sellingPrice = Field(Float)
240
    using_options(shortnames=True)
241
    using_table_options(mysql_engine="InnoDB")
746 rajveer 242
 
4649 phani.kuma 243
class AuthorizationLog(Entity):
244
    id = Field(Integer, primary_key=True, autoincrement = True)    
245
    timestamp = Field(DateTime, default=datetime.datetime.now())
246
    item = ManyToOne('Item')
247
    username = Field(String(30))
248
    reason = Field(Text)
249
    using_options(shortnames=True)
250
    using_table_options(mysql_engine="InnoDB")
251
 
4873 mandeep.dh 252
class MissedInventoryUpdate(Entity):
4748 mandeep.dh 253
    id = Field(Integer, primary_key=True, autoincrement=True)
254
    itemKey = Field(String(200))
4873 mandeep.dh 255
    quantity = Field(Integer)
4748 mandeep.dh 256
    warehouseId = Field(Integer)
4873 mandeep.dh 257
    isIgnored = Field(Boolean)
258
    timestamp = Field(DateTime)
4748 mandeep.dh 259
    using_options(shortnames=True)
260
    using_table_options(mysql_engine="InnoDB")
261
 
3187 rajveer 262
def initialize(dbname='catalog', db_hostname="localhost"):
746 rajveer 263
    #metadata.bind = "sqlite:///inventory-new.sqlite" #need to read it from configserver.
1122 chandransh 264
    #metadata.bind = 'mysql://root:shop2020@localhost/catalog'
3187 rajveer 265
    engine = create_engine('mysql://root:shop2020@' + db_hostname + '/' + dbname, pool_recycle=7200)
1122 chandransh 266
    metadata.bind = engine
94 ashish 267
    metadata.bind.echo = True
268
    setup_all(True)
115 ashish 269
 
270
if __name__=="__main__":
271
    initialize()