Subversion Repositories SmartDukaan

Rev

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