Subversion Repositories SmartDukaan

Rev

Rev 5217 | Rev 5318 | 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)
5217 amit.gupta 82
    comingSoonStartDate = Field(DateTime)
83
    expectedArrivalDate = Field(DateTime)
483 rajveer 84
    status = Field(Integer)
2035 rajveer 85
    status_description = Field(String(100))
609 chandransh 86
    bestDealText = Field(String(100))
630 chandransh 87
    bestDealValue = Field(Float)
621 chandransh 88
    bestSellingRank = Field(Integer)
94 ashish 89
    currentInventory = OneToMany('CurrentInventorySnapshot')
90
    inventoryHistory = OneToMany('ItemInventoryHistory')
103 ashish 91
    statusChangeLog = OneToMany("ItemChangeLog")
4762 phani.kuma 92
    preferredWarehouse = Field(Integer)
1910 varun.gupt 93
    defaultForEntity = Field(Boolean)
2251 ankur.sing 94
    risky = Field(Boolean)
3355 chandransh 95
    expectedDelay = Field(Integer)
4295 varun.gupt 96
    warranty_period = Field(Integer)
4762 phani.kuma 97
    defaultWarehouse = Field(Integer)
4406 anupam.sin 98
    isWarehousePreferenceSticky = Field(Boolean)
4506 phani.kuma 99
    preferredVendor = Field(Integer)
5135 mandeep.dh 100
    type = Field(Enum('SERIALIZED', 'NON_SERIALIZED'), default = 'NON_SERIALIZED', server_default='NON_SERIALIZED')
746 rajveer 101
    using_options(shortnames=True)
102
    using_table_options(mysql_engine="InnoDB")
103 ashish 103
 
94 ashish 104
    def __repr__(self):
122 ashish 105
        return "<Item>%d</item>" % (self.id)
94 ashish 106
 
122 ashish 107
    @property
94 ashish 108
    def get_total_inventory(self):
109
        if self.currentInventory:
110
            i = 0
111
            for entry in self.currentInventory:
112
                i += entry.availability
113
            return i
114
 
115
        else:
116
            return 0;
103 ashish 117
 
122 ashish 118
    @property
94 ashish 119
    def get_all_warehouses(self):
1308 chandransh 120
        return [ci.warehouse for ci in self.currentInventory]
121
 
122
class VendorItemMapping(Entity):
123
    vendor = ManyToOne('Vendor', primary_key=True)
124
    item_key = Field(String(200), primary_key=True)
125
    item = ManyToOne('Item')
126
    using_options(shortnames=True)
127
    using_table_options(mysql_engine="InnoDB")
128
 
129
class VendorItemPricing(Entity):
130
    vendor = ManyToOne('Vendor', primary_key=True)
131
    item = ManyToOne('Item', primary_key=True)
132
    mop = Field(Float)
133
    dealerPrice = Field(Float)
134
    transfer_price = Field(Float)
135
    using_options(shortnames=True)
136
    using_table_options(mysql_engine="InnoDB")
137
 
4897 rajveer 138
class VendorItemProcurementDelay(Entity):
139
    vendor = ManyToOne('Vendor', primary_key=True)
140
    item = ManyToOne('Item', primary_key=True)
141
    procurementDelay = Field(Integer)
142
    using_options(shortnames=True)
143
    using_table_options(mysql_engine="InnoDB")
144
 
4979 rajveer 145
class VendorHolidays(Entity):
146
    vendor = ManyToOne('Vendor', primary_key=True)
147
    holidayType = Field(Integer, primary_key=True, autoincrement=False)
148
    holidayValue = Field(Integer, primary_key=True, autoincrement=False)
149
    occasion = Field(String(100))
150
    using_options(shortnames=True)
151
    using_table_options(mysql_engine="InnoDB")
4897 rajveer 152
 
94 ashish 153
class CurrentInventorySnapshot(Entity):
870 chandransh 154
    item = ManyToOne("Item", primary_key=True)
155
    warehouse = ManyToOne("Warehouse", primary_key=True)
94 ashish 156
    availibility = Field(Integer)
870 chandransh 157
    reserved = Field(Integer)
746 rajveer 158
    using_options(shortnames=True)
159
    using_table_options(mysql_engine="InnoDB")
94 ashish 160
 
161
    def __repr__(self):
162
        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)
163
 
5110 mandeep.dh 164
class BadInventorySnapshot(Entity):
165
    item = ManyToOne("Item", primary_key=True)
166
    warehouse = ManyToOne("Warehouse", primary_key=True)
167
    availability = Field(Integer)
168
    using_options(shortnames=True)
169
    using_table_options(mysql_engine="InnoDB")
170
 
94 ashish 171
class ItemInventoryHistory(Entity):
122 ashish 172
    id = Field(Integer, primary_key=True, autoincrement = True)    
94 ashish 173
    timestamp = Field(DateTime, default=datetime.datetime.now())
174
    availibility = Field(Integer)
175
    item = ManyToOne("Item")
176
    warehouse = ManyToOne("Warehouse")
746 rajveer 177
    using_options(shortnames=True)
178
    using_table_options(mysql_engine="InnoDB")
94 ashish 179
 
180
    def __repr__(self):
181
        pass
103 ashish 182
 
183
class ItemChangeLog(Entity):
122 ashish 184
    id = Field(Integer, primary_key=True, autoincrement=True)
103 ashish 185
    old_status = Field(Integer)
186
    new_status = Field(Integer)
1308 chandransh 187
    timestamp = Field(DateTime)
103 ashish 188
    item = ManyToOne("Item")
746 rajveer 189
    using_options(shortnames=True)
190
    using_table_options(mysql_engine="InnoDB")
94 ashish 191
 
103 ashish 192
    def __repr__(self):
193
        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 194
 
635 rajveer 195
class Category(Entity):
1970 rajveer 196
    id = Field(Integer, primary_key=True, autoincrement=False)
197
    label = Field(String(50))
198
    description = Field(String(200))
199
    parent_category_id = Field(Integer)
4762 phani.kuma 200
    display_name = Field(String(50))
746 rajveer 201
    using_options(shortnames=True)
202
    using_table_options(mysql_engine="InnoDB")
1970 rajveer 203
 
3008 rajveer 204
class SimilarItems(Entity):
205
    item = ManyToOne('Item', primary_key=True)
206
    catalog_item_id = Field(Integer, primary_key=True, autoincrement=False)
207
    using_options(shortnames=True)
208
    using_table_options(mysql_engine="InnoDB")
209
 
3079 rajveer 210
class ProductNotification(Entity):
211
    item = ManyToOne('Item', primary_key=True)
212
    email = Field(String(100), primary_key=True, autoincrement=False)
213
    addedOn = Field(DateTime, primary_key=True, autoincrement=False) 
214
    using_options(shortnames=True)
215
    using_table_options(mysql_engine="InnoDB")
3557 rajveer 216
 
217
class Source(Entity):
218
    id = Field(Integer, primary_key=True, autoincrement=True)
219
    name = Field(String(50))
220
    identifier = Field(String(100))
221
    using_options(shortnames=True)
222
    using_table_options(mysql_engine="InnoDB")
223
 
224
class SourceItemPricing(Entity):
225
    source = ManyToOne('Source', primary_key=True)
226
    item = ManyToOne('Item', primary_key=True)
227
    mrp = Field(Float)
228
    sellingPrice = Field(Float)
229
    using_options(shortnames=True)
230
    using_table_options(mysql_engine="InnoDB")
746 rajveer 231
 
4649 phani.kuma 232
class AuthorizationLog(Entity):
233
    id = Field(Integer, primary_key=True, autoincrement = True)    
234
    timestamp = Field(DateTime, default=datetime.datetime.now())
235
    item = ManyToOne('Item')
236
    username = Field(String(30))
237
    reason = Field(Text)
238
    using_options(shortnames=True)
239
    using_table_options(mysql_engine="InnoDB")
240
 
4873 mandeep.dh 241
class MissedInventoryUpdate(Entity):
4748 mandeep.dh 242
    id = Field(Integer, primary_key=True, autoincrement=True)
243
    itemKey = Field(String(200))
4873 mandeep.dh 244
    quantity = Field(Integer)
4748 mandeep.dh 245
    warehouseId = Field(Integer)
4873 mandeep.dh 246
    isIgnored = Field(Boolean)
247
    timestamp = Field(DateTime)
4748 mandeep.dh 248
    using_options(shortnames=True)
249
    using_table_options(mysql_engine="InnoDB")
250
 
3187 rajveer 251
def initialize(dbname='catalog', db_hostname="localhost"):
746 rajveer 252
    #metadata.bind = "sqlite:///inventory-new.sqlite" #need to read it from configserver.
1122 chandransh 253
    #metadata.bind = 'mysql://root:shop2020@localhost/catalog'
3187 rajveer 254
    engine = create_engine('mysql://root:shop2020@' + db_hostname + '/' + dbname, pool_recycle=7200)
1122 chandransh 255
    metadata.bind = engine
94 ashish 256
    metadata.bind.echo = True
257
    setup_all(True)
115 ashish 258
 
259
if __name__=="__main__":
260
    initialize()